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
    评论
list分页 import java.util.ArrayList; import java.util.List; import com.jsp.vo.Client; /** * PageBean * * @author apple * */ public class Page { private int currentPage; // 当前页数 private int totalPages; // 总页数 private int pageRows =8; // 每页显示记录数 private int totalRows; // 总数据数 private int specPages; // 指定页数 private int pageStartRow ; // 每页的起始数 private int pageEndRow; // 每页的终止数 private boolean hasNextPage; // 是否有下一页 private boolean hasPreviousPage; // 是否有前一页 private List list; /** * 初始化对象 * * @param tempList * 结果集 * */ public Page(List tempList,int pageRows) { this.list = tempList; this.pageRows = pageRows; this.totalRows = tempList.size(); this.currentPage = 1; // 获取总页数 if ((totalRows % pageRows) == 0) { totalPages = totalRows / pageRows; if(this.totalRows == 0 ){ this.pageRows = 0; } } else { totalPages = totalRows / pageRows + 1; } this.hasPreviousPage = false; // 是否有下一页 if (currentPage == totalPages) { hasNextPage = false; } else { hasNextPage = true; } this.pageStartRow = 0; if (totalRows < pageRows) { this.pageEndRow = totalRows; } else { this.pageEndRow = pageRows; } } /** * 获取当前页的对象集合 * * @return List 对象集合 */ public List getCurrentPageList() { if (currentPage * pageRows < totalRows) { pageEndRow = currentPage * pageRows; pageStartRow = pageEndRow - pageRows; } else { pageEndRow = totalRows; pageStartRow = pageRows * (totalPages - 1); } List pageList = new ArrayList(); for (int i = pageStartRow; i < pageEndRow; i++) { pageList.add(list.get(i)); } return pageList; } /** * 获取上一页的对象集合 * * @return List 对象集合 */ public List getPreviousPage() { currentPage--; if (currentPage = totalPages) { hasNextPage = false; } else { hasNextPage = true; } if (
在 MyBatis 中,常见的分页查询方法有以下几种: 1. 使用 LIMIT 和 OFFSET 关键字进行分页 这是一种最常见的分页查询方法。在 SQL 语句中使用 LIMIT 和 OFFSET 关键字来限制查询结果的数量和起始位置,例如: ```sql SELECT * FROM table_name LIMIT start, pageSize; ``` 其中,start 表示查询结果的起始位置,pageSize 表示每页的记录数。在 MyBatis 中,可以使用占位符和参数的方式来动态生成 SQL 语句,例如: ```xml <select id="findUsers" parameterType="map" resultType="User"> select * from user <where> <if test="username != null and username != ''"> and username like #{username} </if> </where> order by id desc limit #{start}, #{pageSize} </select> ``` 2. 使用 RowBounds 进行分页 RowBounds 是 MyBatis 提供的一个用于分页查询的类,它可以在查询语句中指定起始位置和查询数量,例如: ```java List<User> users = sqlSession.selectList("findUsers", null, new RowBounds(start, pageSize)); ``` 这种方法需要在查询语句中不使用 LIMIT 和 OFFSET 关键字,而是在查询方法中使用 RowBounds 来指定分页参数。 3. 使用 MyBatis 分页插件进行分页 MyBatis 提供了一些分页插件,例如 PageHelper、Mybatis-Plus 等,它们可以方便地实现分页查询功能,只需要在项目中引入对应的依赖即可。使用插件进行分页查询的示例代码如下: ```java PageHelper.startPage(pageNum, pageSize); List<User> users = userDao.findUsers(username); PageInfo<User> pageInfo = new PageInfo<>(users); return new Page<>(pageInfo.getTotal(), users); ``` 其中,PageHelper 是一个 MyBatis 分页插件,它封装了分页查询的逻辑,只需要调用 startPage() 方法来指定页码和每页的记录数,然后在查询方法返回后调用 PageInfo 类来获取分页查询结果。这种方法简单易用,不需要手动编写分页查询语句。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值