zoukankan      html  css  js  c++  java
  • 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 ();//获得结果
  • 相关阅读:
    HDU 1863 畅通工程(Kruskal)
    HDU 1879 继续畅通工程(Kruskra)
    HDU 1102 Constructing Roads(Kruskal)
    POJ 3150 Cellular Automaton(矩阵快速幂)
    POJ 3070 Fibonacci(矩阵快速幂)
    ZOJ 1648 Circuit Board(计算几何)
    ZOJ 3498 Javabeans
    ZOJ 3490 String Successor(模拟)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
    Java实现 LeetCode 749 隔离病毒(DFS嵌套)
  • 原文地址:https://www.cnblogs.com/xy2401/p/3113537.html
Copyright © 2011-2022 走看看