• 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 ();//获得结果
  • 相关阅读:
    vue之下拉菜单Dropdown的使用
    elinput输入框的readonly属性
    通过CollectionUtils工具类判断集合是否为空,通过StringUtils工具类判断字符串是否为空
    前端与后端之间参数的传递与接收和@RequestBody,@Requestparam,@Param三个注解的使用
    为什么数据库能查出两条id相同的数据
    js中函数调用时,对参数个数和类型没有要求
    避免创建不需要的对象,消除过期对象的引用
    避免使用终结方法
    避免使用终结方法
    快速排序
  • 原文地址:https://www.cnblogs.com/xy2401/p/3113537.html
Copyright © 2020-2023  润新知