按照过滤条件、排序语句、起始位置和每页条数获取分页数据
2013-11-19 11:05
423 查看
在通用的DAO中写一个通用的方法,可以让任意层的任意方法通过调用该方法来查询数据并且分页。
通用DAO接口:
实现类:
其中,QueryResult为存放查询结果的类,有两个成员变量,如下:
通用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> */ @Transactional public 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; } }在类上都使用了泛型,这样才能作为可以被复用的类。
相关文章推荐
- DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
- JQueryEasyUI-DataGrid显示数据,条件查询,排序及分页
- 腾讯云图片鉴黄集成到C# SQL Server 怎么在分页获取数据的同时获取到总记录数 sqlserver 操作数据表语句模板 .NET MVC后台发送post请求 百度api查询多个地址的经纬度的问题 try{}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后? js获取某个日期
- 利用DataSet、DataTable、DataView按照自定义条件过滤数据
- SqlServer分页存储过程(多表查询,多条件排序),Repeater控件呈现数据以及分页
- Java连接HBASE数据库,创建一个表,删除一张表,修改表,输出插入,修改,数据删除,数据获取,显示表信息,过滤查询,分页查询,地理hash
- 在SQL语句中分条件获取数据
- 存储过程大数据通用高效分页(不带条件和排序)
- TableStore表格存储(阿里云OTS)多行数据操作查询,支持倒序,过滤条件和分页
- 使用java8的lambada表达式按照一定的条件对查出的数据进行过滤
- 简单的实现分页获取数据的sql语句
- oracle心得1--oracle简介@基本sql语句@条件查询@排序数据理论与案例
- SQL Server分页语句ROW_NUMBER,读取第4页数据,每页10条
- MYSQL数据库(十)- 数据表的插入(insert)、删(delete)、改(update)、查(select)、group by 分组、having语句设置分组条件,order by查询结果排序,
- MySql同时查询三个不关联的表,同时获取到三个表的数据,并按照某一字段排序
- jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
- A、B两张表 获取过滤条件后A表中除了B表中剩余的数据
- MySQL 查询语句SELECT和数据条件过滤
- 利用DataSet、DataTable、DataView按照自定义条件过滤数据