Hibernate 分页查询DAO

这里使用两种查询方法
Hibernate中使用criteria进行条件查询
Hibernate中使用原始的SQL进行查询
 
 

查Hibernate中使用criteria进行条件查询还是很方便的  
 1 DetachedCriteria criteria = DetachedCriteria . forClass(Employee. class) ;
 2 criteria.addOrder (Order. asc("employeeId" ));
 3 criteria.setProjection (Projections.rowCount());// 设置查询的结果是总数
 4 
 5 int totalRows =  
 6            ((Number) getHibernateTemplate().findByCriteria (criteria).get(0 )).intValue();
 7        
 8 criteria.setProjection ( null );//设置为 null这样查询的 结果就不是总数了
 9 //criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
10 criteria.setResultTransformer (Criteria.ROOT_ENTITY ); //使用了关联类查询要设置这个,不然返回的是 object【】类型
11 employeeList= getHibernateTemplate().findByCriteria
12                          (criteria, page.getStartIndex()-1, page.getPageSize());//分页查询
13  
14 page.setTotalRecNum (totalRows);
15 page.setPageContent (employeeList);
Hibernate 使用原始的 sql 进行分页查询
如果查询的条件比较复杂,有关联到多张表的话,用 Hibernate Criteria或者 HQL查询多有不便。
如,1、各实体类之间没有设置关联 (数据库的外键没有很严格,数据库表太多了太复杂,设置外键的话,多有不便 )
2、有设置管理的话,有Criteria查询的话,会写的很复杂,不如 sql两行
 
这里使用 原始的 sql查进行分页查询
 
Sql 语句上面经过的拼接 这里不表
sqlFrom from aTable a,bTable b,cTable c 查询的表
sqlWhere  查询的条件
这里的sqlWhere 第一个条件一直为 true的先把参数写在都也在这里。因为 sqlWhere 的条件是拼接的,这些参数不定的会出现在后面
如果没有出现的参数使用 sqlQuery.setParameter赋值会报错。虽然用 sql 字符串 contains判断是否存在此参数,不过要写很多 if来判断,不如让他们都出现
String sqlWhere = " where ( 1=1 or :palnVer=:fsStatus or :empId=1 ) " + ""//不一定出現的變量
 
 1 String countSql = "select count(*) " + sqlFrom + sqlWhere ;//先查詢總數
 2 
 3 sqlQuery = session .createSQLQuery(countSql);
 4 
 5 sqlQuery.setParameter ( "progId" , userInfo.getProgId());    //設置參數的值代碼
 6 ....
 7 int size = (Integer)sqlQuery .list(). get(0 );
 8 
 9 String dataSql = "select v.* " + sqlFrom + sqlWhere ;//查詢記錄
10 
11 dataSql = dataSql + "  ORDER BY v.PROJ_ID" ;//按projID升序
12 
13 sqlQuery = session .createSQLQuery(dataSql);
14 
15 sqlQuery.setFirstResult (newPager.getStartRow());//设置查询的起始记录
16 sqlQuery.setMaxResults (newPager.getPageSize());//设置查询的查询的条数
17 
18 sqlQuery.addEntity ( "v" ,VwProjMaster.class );//设置查询的结果封装成对象
19 
20 List<VwProjMaster > result= sqlQuery.list ();//获得结果
原文地址:https://www.cnblogs.com/xy2401/p/3113537.html