按照过滤条件、排序语句、起始位置和每页条数获取分页数据
来源:互联网 发布:美国私立高中 知乎 编辑:程序博客网 时间:2024/04/29 13:12
在通用的DAO中写一个通用的方法,可以让任意层的任意方法通过调用该方法来查询数据并且分页。
通用DAO接口:
package com.wcx.shop.dao;import java.io.Serializable;import java.util.LinkedHashMap;import java.util.List;import com.wcx.shop.utils.QueryResult;/** * 通用DAO接口 * @author Administrator * @param <T> */public interface ICommonDao<T> {QueryResult<T> findCollectionByConditionPaged(String condition, Object[] params,LinkedHashMap<String, String> orderBy, int startPos, int pageSize);}
/** * 通用DAO实现类,为抽象,无法实例化 * @author Administrator * @param <T> */@Transactionalpublic abstract class CommonDaoImpl<T> implements ICommonDao<T> {private Class entityClass = GenericSuperClass.getActualTypeClass(this.getClass());//通过反射获取类实体/** * 按照一定的条件获取分页数据 * @param 过滤条件、过滤参数、排序条件、起始位置、每页数据条数 * @return QueryResult对象,存储总数据条数(long)和分页数据集合(list) */public QueryResult<T> findCollectionByConditionPaged(String condition,final Object[] params, LinkedHashMap<String, String> orderBy,final int startPos, final int pageSize) {final long[] totalNumber = new long[1];//因为final变量无法赋值,因此需要用数组或者集合来封装一下String hql = "from " + entityClass.getSimpleName() + " o where 1 = 1 ";String orderHql = orderByHql(orderBy);if(condition == null)condition = "";final String finalHql = hql + condition + orderHql;List<T> objectsList = (List<T>) hibernateTemplate.execute(new HibernateCallback() {public Object doInHibernate(Session session)throws HibernateException, SQLException {Query query = session.createQuery(finalHql);totalNumber[0] = query.list().size(); for(int i = 0; params != null && i < params.length; i++) {query.setParameter(i, params[i]);}return query.setFirstResult(startPos).setMaxResults(pageSize).list();}});QueryResult<T> qr = new QueryResult<T>();qr.setTotalNumber(totalNumber[0]);qr.setRecordList(objectsList);return qr;}}
其中,QueryResult为存放查询结果的类,有两个成员变量,如下:
import java.util.List;/** * 用来存放记录总数和分页查询列表两个结果的类 * @author Administrator * @param <T> */public class QueryResult<T> {/** 记录总数 */private long totalNumber;/** 分页查询记录集合 */private List<T> recordList;public long getTotalNumber() {return totalNumber;}public void setTotalNumber(long totalNumber) {this.totalNumber = totalNumber;}public List<T> getRecordList() {return recordList;}public void setRecordList(List<T> recordList) {this.recordList = recordList;}}在类上都使用了泛型,这样才能作为可以被复用的类。
- 按照过滤条件、排序语句、起始位置和每页条数获取分页数据
- 利用DataSet、DataTable、DataView按照自定义条件过滤数据
- 利用DataSet、DataTable、DataView按照自定义条件过滤数据
- Oracle:过滤和排序数据
- 3. 过滤和排序数据
- 过滤和排序数据1
- 在SQL语句中分条件获取数据
- 使用java8的lambada表达式按照一定的条件对查出的数据进行过滤
- 从起始位置开始和从任意位置开始的快速排序
- 存储过程-大数据通用高效分页(不带条件和排序)
- 存储过程01-大数据通用高效分页(不带条件和排序)
- hdu1231lis+起始位置和终点位置
- 数据where条件过滤
- mysqldump按照条件导出数据
- mysql 按照条件导出数据
- sql语句中过滤条件where和having的区别
- SELECT语句的过滤条件
- ASP.NET中大量数据的分页、排序与过滤
- 六种方法全面提升你的气质
- 两个DIV之间的间距,clear属性灵活应用,方便控制一行div数量(转载,学习一下)
- 一天面试助理的亲身经历,其中涉及到几个程序员都关心的话题,希望能对大家有所帮助。
- Net Requirements Planning (10)
- ViewFlipper和ViewPager的区别
- 按照过滤条件、排序语句、起始位置和每页条数获取分页数据
- Android学习笔记之详细讲解画圆角图片
- 程序员练级技术攻略
- Boost Fedora14 Gcc4.8.1 configurations
- 生成一个验证码
- c语言获取本地ip
- 深入理解C++浮点数(float、double)类型数据比较、相等判断
- 4G通信技术LTE介绍
- ffmpeg 基本数据结构和对象(二): muxer/demuxer 和 encoder/decoder