关于DAO和分页实现
来源:互联网 发布:淘宝客怎样推广店铺 编辑:程序博客网 时间:2024/04/28 05:08
1.关于DAO<T>
1)接口DAO一般具有insert、update、query、queryForList、getSingleValue、batch等方法
2)其实现类BaseDAO<T>一般通过QueryRunner实现其所有方法,在这个实现类中会有clazz私有属性,为的是获取泛型参数类型
》public BaseDao() {
Type type = getClass().getGenericSuperclass(); //Dao
if (type instanceof ParameterizedType) { //判断是否是类Parameterized的实例,ParameterizedType就是代表是否是带泛型参数的类
Type[] types = ((ParameterizedType) type).getActualTypeArguments(); //返回Dao的泛型参数数组
if (types != null && types.length > 0) {
clazz = (Class) types[0]; //需要实例化的clazz就是第一个参数类型
}
}
}
》其insert方法会有返回值,返回类型为Long型,因为使用queryRunner的方法不能得到返回值,所以只能使用传统的方法
try {
connection = DBUtils.getConnection();
preparedStatement = connection.prepareStatement(sql,
Statement.RETURN_GENERATED_KEYS);//设置返回主键
if (args != null && args.length > 0) {
for (int i = 0; i < args.length; i++) {
preparedStatement.setObject(i + 1 , args[i]);
}
}
preparedStatement.executeUpdate();
resultSet = preparedStatement.getGeneratedKeys();//返回主键
if(resultSet.next()){
id = resultSet.getLong(1);
}
》更新方法使用queryRunner.update(connection, sql);
》查询方法使用queryRunner.query(connection, sql, new BeanHandler<T>(clazz), args);
》查询返回List使用queryRunner.query(connection, sql, new BeanListHandler<T>(clazz), args);
》批量操作使用queryRunner.batch(connection, sql, params);
》得到单个值使用(V) queryRunner.query(connection, sql, new ScalarHandler(), args);
3)具体对象的接口一般会有操作对象的所有方法
4)具体的类需要继承BaseDAO实现其对应的接口,通过BaseDAO里的方法实现其对应接口里的方法
2.关于分页
1)具有第几页pageNo、这一页显示几条记录pageSize、这一页显示哪些信息pageList、全部页数的信息量totalItemNumber
2)其构造方法需要利用其pageNo的属性进行初始化
3)得到pageNo的方法时需要判断其是否符合实际情况,最小值不能小于1,最大值不能超过getTotalPageNumber
4)getTotalPageNumber由totalItemNumber/pageSize获得,还要注意不能除净的情况,如果不能除净。需要把totalPageNumber++;
5)通过是否大于1判断是否是首页,通过判断是否小于totalPageNumber判断是否是最后一页,还需得到下一页、上一页(需要通过是否是首页或者末页进行判断)
3.关于条件查询
1)根据需要条件查询,设置一个Criteria类
2)其属性为其需要进行条件查询的属性,如果需要和分页结合起来,就还需要定义一个pageNo(页码)的属性(特别需要注意pageNo的值是否符合实际情况)
3)查询条件:如果是属于范围类型,则可以设定默认值,最小为0,最大为Integer.MAX_VALUE。为的是当把查询条件的类作为参数进行查询时,可以不用判断是否输入了条件。
通过数据库实现其分页
// limit 4,3代表从5开始,数三个就是5,6,7
@Override
public List<Book> getPageList(CriteriaBook cb, int pageSize) {
String sql = "select * from books where price>= ? and price <= ? limit ? ,? ";
return queryForList(sql, cb.getMinPrice(),cb.getMaxPrice(),(cb.getPageNo()-1)*pageSize,pageSize);
}
1)接口DAO一般具有insert、update、query、queryForList、getSingleValue、batch等方法
2)其实现类BaseDAO<T>一般通过QueryRunner实现其所有方法,在这个实现类中会有clazz私有属性,为的是获取泛型参数类型
》public BaseDao() {
Type type = getClass().getGenericSuperclass(); //Dao
if (type instanceof ParameterizedType) { //判断是否是类Parameterized的实例,ParameterizedType就是代表是否是带泛型参数的类
Type[] types = ((ParameterizedType) type).getActualTypeArguments(); //返回Dao的泛型参数数组
if (types != null && types.length > 0) {
clazz = (Class) types[0]; //需要实例化的clazz就是第一个参数类型
}
}
}
》其insert方法会有返回值,返回类型为Long型,因为使用queryRunner的方法不能得到返回值,所以只能使用传统的方法
try {
connection = DBUtils.getConnection();
preparedStatement = connection.prepareStatement(sql,
Statement.RETURN_GENERATED_KEYS);//设置返回主键
if (args != null && args.length > 0) {
for (int i = 0; i < args.length; i++) {
preparedStatement.setObject(i + 1 , args[i]);
}
}
preparedStatement.executeUpdate();
resultSet = preparedStatement.getGeneratedKeys();//返回主键
if(resultSet.next()){
id = resultSet.getLong(1);
}
》更新方法使用queryRunner.update(connection, sql);
》查询方法使用queryRunner.query(connection, sql, new BeanHandler<T>(clazz), args);
》查询返回List使用queryRunner.query(connection, sql, new BeanListHandler<T>(clazz), args);
》批量操作使用queryRunner.batch(connection, sql, params);
》得到单个值使用(V) queryRunner.query(connection, sql, new ScalarHandler(), args);
3)具体对象的接口一般会有操作对象的所有方法
4)具体的类需要继承BaseDAO实现其对应的接口,通过BaseDAO里的方法实现其对应接口里的方法
2.关于分页
1)具有第几页pageNo、这一页显示几条记录pageSize、这一页显示哪些信息pageList、全部页数的信息量totalItemNumber
2)其构造方法需要利用其pageNo的属性进行初始化
3)得到pageNo的方法时需要判断其是否符合实际情况,最小值不能小于1,最大值不能超过getTotalPageNumber
4)getTotalPageNumber由totalItemNumber/pageSize获得,还要注意不能除净的情况,如果不能除净。需要把totalPageNumber++;
5)通过是否大于1判断是否是首页,通过判断是否小于totalPageNumber判断是否是最后一页,还需得到下一页、上一页(需要通过是否是首页或者末页进行判断)
3.关于条件查询
1)根据需要条件查询,设置一个Criteria类
2)其属性为其需要进行条件查询的属性,如果需要和分页结合起来,就还需要定义一个pageNo(页码)的属性(特别需要注意pageNo的值是否符合实际情况)
3)查询条件:如果是属于范围类型,则可以设定默认值,最小为0,最大为Integer.MAX_VALUE。为的是当把查询条件的类作为参数进行查询时,可以不用判断是否输入了条件。
通过数据库实现其分页
// limit 4,3代表从5开始,数三个就是5,6,7
@Override
public List<Book> getPageList(CriteriaBook cb, int pageSize) {
String sql = "select * from books where price>= ? and price <= ? limit ? ,? ";
return queryForList(sql, cb.getMinPrice(),cb.getMaxPrice(),(cb.getPageNo()-1)*pageSize,pageSize);
}
0 0
- 关于DAO和分页实现
- javabean+jsp+DAO实现分页
- 关于实现抽取公共DAO
- 关于DAO简单理解实现
- DAO分页
- 【转载】关于DAO和ORM
- J2EE:关于DAO和DTO
- 关于dao层的封装和前端分页的结合(文章有点长,耐心点哦)
- extremetable+hibernate实现分页 关于结合hibernate后台数据分页和eXtremeTable分页功能的使用
- extremetable+hibernate实现分页 关于结合hibernate后台数据分页和eXtremeTable分页功能的使用
- 关于MVC实现分页
- 关于ibatis的dao实现笔记
- DAO层实现分页的方法.代码作为记录.
- hibernate+pageBean实现分页dao层功能代码
- SSM 关于service和dao的封装
- 关于MVC和DAO设计模式
- 关于DAO
- 关于dao
- 立贴见证
- METIS-一种图切分的软件包(简介)
- requiredJS----AMD模块加载器
- C++ 静态成员变量和静态成员函数
- Step into Kotlin - 23 - 与 Java 交互
- 关于DAO和分页实现
- try-catch-finally异常处理(二)
- SQL - DEFAULT约束
- 启程
- UILabel UI中添加文字框
- GTK进阶学习:设置窗口背景图(可指定其大小)
- USACO 2011 Feb Gold 1.Cowlphabet 奶牛文字
- C# 键盘勾勒 打开,隐藏,关闭,截屏快捷键
- Mysql autoReconnect 的问题