MyBatis分页功能的实现

我们在开发的过程中经常会遇到分页,对于mybatis实现分页功能,我们可以从几方面着手。我这里主要讲解一下RowBounds,pageHelper分页插件以及数组分页。

RowBounds分页实现:

RowBounds分页的原理:简单的把offset之前的数据都skip掉,超过limit之后的数据不取出

代码实例:
int offset = json.getIntValue("offset");
        int limit = json.getIntValue("limit");
//        int offsets = ((offset - 1) * limit == 0) ? 0 : ((offset - 1) * limit + 1);
        int offsets = (offset-1)*limit;
        RowBounds rowBounds = new RowBounds(offsets, limit);
        List<MisMypolicylist> misMypolicylists = misMypolicylistMapper.selectByPage(rowBounds);

List<MisMypolicylist> selectByPage (RowBounds rowBounds);

<select id="selectByPage" resultMap="BaseResultMap" >
    select  * from TB_VEHICLE_POLICY  order by recid desc
</select>


pageHelper分页实现:

代码示例:
Springboot集成PageHelper插件实现分页
第一步:增加jar包

<!-- 分页插件 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.1.2</version>
        </dependency>

第二步:SPringBoot配置文件中配置PageHellper插件

配置方式①:application.yml文件方式

#pagehelper分页插件
pagehelper:
    helperDialect: mysql
    reasonable: true
    supportMethodsArguments: true
    params: count=countSql

配置方式②:application.properties文件方式

###pageHelper分页插件
pagehelper.helper-dialect=MYSQL
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true
pagehelper.params=count=countSql

第三步:

在service层查询数据的时候增加这一句

@Override
    public List<User> findAllUser(int pageNum, int pageSize) {
        //将参数传给这个方法就可以实现物理分页了,非常简单。
        //pageNum  当前页,pageSize每一页显示的数据
        PageHelper.startPage(pageNum, pageSize);
        return misMypolicylistMapper.selectByPages();
    }

List<MisMypolicylist> selectByPages (RowBounds rowBounds);

<select id="selectByPages" resultMap="BaseResultMap" >
    select  * from TB_VEHICLE_POLICY  order by recid desc
</select>

数组实现:

数组实现就是先查出所有的数据,然后根据第几页和每页条数进行取数据
代码示例:
List<TbLifeOrderList> orderList = tbLifeOrderListMapper.selectByUnEntryId(tbLifeOrderList);
        int reqStart = Integer.parseInt(pageNum);
        int pageSizes = Integer.parseInt(pageSize);
        int allPagesLife = 0;  //寿险总页数
        if (!orderList.isEmpty()) {
            ArrayList<String> list = new ArrayList<String>();
            if (orderList.size() > 0) {
                int m = 0;
                int n = 0;
                int total = orderList.size();
                if (total % pageSizes == 0) {
                    allPagesLife = total / pageSizes;
                } else {
                    allPagesLife = total / pageSizes + 1;
                }
                m = (reqStart - 1) * pageSizes;
                n = m + pageSizes;
                int count = n > total ? total : n;
                for (int i = m; i < count; i++) {
                    list.add(orderList.get(i).getOrderId());
                }
            }    

注:以上实现方式只是mybatis实现分页的其中一种方式,RowBounds和数组分页的实现都是查询所有数据,大批量查询数据容易造成内存溢出,
所以这两种方式都是针对数据量比较小的情况下使用。
对于mybatis的分页实现还可以使用拦截器和sql直接进行分页,我们后续再更新。

posted on 2018-12-13 14:55  诗——远方  阅读(176)  评论(0)    收藏  举报

导航