List分页的几种方法

1.根据入参带分页参数进行sql查询分页

         Criteria criteria = new Criteria();
         //将dataAuto转成 factoryId brandId seriesId 等查询条件
         String dataAuth = "";
         TypeCaseHelper.dataAuto(criteria, dataAuth);
         // 设置分页信息
         ExtPager pager = new ExtPager();
         Integer startTure = start * pageSize;
         criteria.setMysqlPageSize(pageSize);
         criteria.setMysqlStart(startTure);
         // 排序信息
         if (StringUtils.isNotBlank(pager.getDir()) && StringUtils.isNotBlank(pager.getSort())) {
             criteria.setOrderByClause(pager.getSort() + " " + pager.getDir());
         }
         List<VhlAlarmStatusMgtEntity> listDistinct = getVhlAlarmStatusMgtEntities(vin, faultStatus, confirmStatus, startDateTime, endDateTime, sdf, sdfm, carTypeList, criteria);

对应的分页sql

  <select id="selectByExample" parameterType="Criteria" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from status_mgt
    <where>
      <if test="condition.carTypeList != null and condition.carTypeList.size() > 0" >
        and car_type in
        <foreach collection="condition.carTypeList" item="item"  open="(" separator="," close=")">
          #{item}
        </foreach>
      </if>
      <if test="condition.startDateTime != null and condition.startDateTime!=''">
        and alarm_time >= str_to_date(#{condition.startDateTime,jdbcType=VARCHAR},'%Y-%m-%d %H:%i:%S')
      </if>
      <if test="condition.endDateTime != null and condition.endDateTime!=''">
        and  str_to_date(#{condition.endDateTime,jdbcType=VARCHAR},'%Y-%m-%d %H:%i:%S') >= alarm_time
      </if>
      and logic_flag = 1
    </where>
    order by alarm_time desc
    <if test="mysqlStart != null  and mysqlPageSize != null">
        limit #{mysqlStart}, #{mysqlPageSize}
    </if>

  </select>

2.对所有list根据分页参数分页

         Criteria criteria1 = new Criteria();
         List<VhlAlarmStatusMgtEntity> listDistinctForCout = getVhlAlarmStatusMgtEntities(vin, faultStatus, confirmStatus, startDateTime, endDateTime, sdf, sdfm, carTypeList, criteria1);
         Integer count = listDistinctForCout.size(); // 记录总数
         Integer pageCount; // 页数
         if (count % pageSize == 0) {
             pageCount = count / pageSize;
         } else {
             pageCount = count / pageSize + 1;
         }
         int fromIndex; // 开始索引
         int toIndex; // 结束索引
         if (!pageCount.equals(start+1)) {
             fromIndex = start * pageSize;
             toIndex = fromIndex + pageSize;
             if(toIndex > count){
                 fromIndex = (start-1) * pageSize;
                 toIndex = count;
             }
         } else {
             fromIndex = start * pageSize;
             toIndex = count;
         }
         List<VhlAlarmStatusMgtEntity> pageList = listDistinctForCout.subList(fromIndex, toIndex);

3.PageHelper分页

      //开启分页
        PageHelper.startPage(Integer.parseInt(pageNum), Integer.parseInt(pageSize));
 
        PageInfo<Map<String, String>> pageInfo = new PageInfo(datalist);

        HashMap<String, Object> map= new HashMap<>();
        map.put("datalist", datalist);
        map.put("total", pageInfo.getTotal());
        map.put("size", pageInfo.getPageSize());
        map.put("page", pageInfo.getPageNum());

  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hibernate中的query 博客分类: • Hibernate HibernateSQLSQL ServerMySQLJDBC Hibernate中的query.setFirstResult(),query.setMaxResults(); 一、query.scroll()和query.setFirstResult(),query.setMaxResults();这两种方法都可以取到一定范围内的数据,用来数据分页显示。那么两者区别,以及两者的效率如何? 答:1.scroll是用JDBC2.0的可滚动结果集实现;query.setMaxResults();query.setFirstResult()是数据库SQL语句实现。 2.你说是在数据库就分页好呢?还是把结果集都取到内存再分页好呢?(应该是在数据库就分了好些吧,但是如果在内存分页的话,换页的时候是不是更快一些呢?) 3.在数据库进行分页是首选的方式。数据库分页实际上是利用数据库本身SQL扩展的功能进行分页,例如MySQL的 limit 0,50这样的SQL语句。不但速度快,而且非常节省内存。不过不是每种数据库的都有这种分页支持的SQL,例如SQL Server就不支持。 4.scroll是利用JDBC2.0的功能做分页的,那么就完全取决于特定数据库的JDBC Driver的实现了。事实上大部分JDBC Driver都是把所有的结果集都一次取到内存,然后再分页的。如果这个结果集非常大,例如几万条,不但程序执行速度会很慢,而且很容易导致out of memory。当然个别JDBC Driver使用了服务器端游标来实现,那么就不会导致这种问题,例如jTDS。 二、Hibernate可以使用Query.setMaxResults方法简单地设置需要查询的最大结果集。 然后Hibernate会自动根据所设置的数据库方言翻译成相应的SQL语句提交给数据库。比如如果数据库是Oracle,SQL Server等,则翻译为类似select ... top 10之类的SQL语句,若是MySQL,则翻译为select ... limit 10之类的SQL。 三、举例: Java代码 1. import org.hibernate.Query; 2. 3. query.setFirstResult(0),query.setMaxResults(4);相当于MySQL中的limit 0, 4; 4. public void testQuery() { 5. Session session = null; 6. try { 7. session = HibernateUtils.getSession(); 8. session.beginTransaction(); 9. Query query = session.createQuery("from User"); 10. query.setFirstResult(0);//从第一条记录开始 11. query.setMaxResults(4);//取出四条记录 12. List userList = query.list(); 13. for (Iterator iter=userList.iterator(); iter.hasNext();) { 14. User user = (User)iter.next(); 15. System.out.println(user.getId()); 16. System.out.println(user.getName()); 17. } 18. session.getTransaction().commit(); 19. }catch(Exception e) { 20. e.printStackTrace(); 21. session.getTransaction().rollback(); 22. }finally { 23. HibernateUtils.closeSession(session); 24. } 25. }
jspPageControlor分页插件11.2版:<br>一、插件简介<br><br>jspPageControlor分页插件是千里web架构实验室成员--刘捷开发的插件,用来解决jsp程序设计中分页所带来的不便,让程序开发者轻松的实现分页功能。<br><br>jspPageControlor分页插件具有以下特点:<br>1、独立于jsp程序。不管jsp使用的什么开发模式,也不管使用何种数据库,只要按插件要求进行返回操作,就可轻松的实现分页。<br>2、此插件将分页与搜索分离,高度解耦合,可在分页的同时,轻松实现搜索操作。<br>3、程序绿色,简洁,系统资源消耗低,执行速度快,效率高。<br>4、使用简单,方便,也可根据自己需要,对插件的某些方法进行重写。<br><br>二、使用说明<br><br>1、此插件将数据库查询和分页操作分离开,在查询的时候,不管采用什么设计模式,都必须实现 PageListener接口。 2、接口里面包含四个方法 (1)、public List doSelect(int recordStart,int sizePage),参数recordStart表示从第几条记录开始查询。参数sizePage表示一次查几条记录。返回一个list对象(该list对象可以是 一个记录集,也可以是一个POJO类对象)<br>(2)、public int getCount(),查询该表中的记录总数,返回一个int对象。<br>(3)、public void close(),放置所有关闭操作的方法。<br>3、调用页面,必须添加PageListener监听器,即实现addPageListener(Object)方法,参数为操作 数据库类的对象。<br>4、必须实例化插件的pageConfig对象,将一些配置信息,如HttpServletRequest对象传给此对象,并将此对象传给PageControl对象。<br>5、用getRecord()方法获取存有记录的list对象;<br>用getFirstPage()方法获取'首页'的标记;<br>用getPageUp()方法获取'上一页'的标记;<br>用getPageDown()方法获取'下一页'的标记;<br>用getLastPage()方法获取'末页'的标记;<br>用getPageForward()方法获取'跳转到第几页'的输入框标记;<br>用getCountRecord()方法获取总记录数;<br>用getCountPage()方法获取总页数;<br>用getCurrentPage()方法获取当前页数;<br>6、如果需要把上一页,下一页等标记换成图片,则只需调用<br>setPageDown('图片路径+图片名'),<br>setPageUp('图片路径+图片名'),<br>setFirstPage('图片路径+图片名'),<br>setLastPage('图片路径+图片名');<br>详细操作请查看帮助文档和具体实现案例;<br><br>三、改进<br><br>此版插件融合了搜索,将分页与搜索独立。<br><br>四、插件组成<br><br>PageControlor分页插件(此插件仅支持jsp) 包含4个部分:<br>PageControlor分页插件(包含源码);<br>分页的帮助文档(包含HTML格式的java文档和CHM格式的API文档);<br>分页插件使用案例(以一个问吧系统为例,详细讲解插件的使用方法);<br><br>五、运行配置<br><br>1、运行环境为jdk(1.4以上),Tomcat(5.0以上),mysql(5.0.x);<br>2、运行时须改动database.properties,把数据库名,用户名和密码改称自己数据库的设置;<br>3、将posts.sql文件导入到您的mysql服务器里面。<br><br><br><br>备注:<br>由于API帮助文档是1.1版的,如有信息与此说明文档冲突,则按此文档标准进行操作。<br>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值