Mybatis 实现分页

本文详细探讨了在Mybatis中使用DAO层数组分割、SQL的LIMIT、RowBounds函数以及插件实现的分页方法,同时提供了性能优化建议,包括MySQL中LIMIT/OFFSET查询的用法和优化技巧。
摘要由CSDN通过智能技术生成

1.DAO层调用数组进行分割

预查询大量数据,返回后,进行细致数据处理
适用于访问频繁 数据量较小的开发环境

public List<User> queryUserByArray(int currPage, int pageSize) {
        //查询数据
        List<User> list = userMaper.getUsersByList()
        //从第几条数据开始
        int firstIndex = (currPage - 1) * pageSize;
        //到第几条数据结束
        int lastIndex = currPage * pageSize;
        //直接在list中截取
        return list.subList(firstIndex, lastIndex);
    }

2.在sql语句直接使用limit

SELECT * FROM 表名 LIMIT 行数;
表示返回多少条数据
SELECT * FROM 表名 LIMIT 开始行数,结束行数;
表示返回多少条数据-多少条数据

<select id="queryBySql" parameterType="map" resultMap="usermapper">
        select * from user limit #{currIndex} , #{pageSize}
</select>
public List<User> queryBySql(int currPage, int pageSize) {
        Map<String, Object> data = new HashedMap();
        data.put("currIndex", (currPage-1)*pageSize);
        data.put("pageSize", pageSize);
        return mapper.queryBySql(data);
    }

1查询第1条到第10条的数据select * from table limit 0,10;
—>对应需求就是查询第一页的数据:select * from table limit (1-1)*10,10;

3.使用RowBounds(offset,limit)函数实现分页

List<User> users = userMapper.selectPage(new RowBounds(5, 10));
   log.info("users:{}",users);

在这里插入图片描述

users:[User(id=6, username=柳云璇, grade=小三(5), age=25, phone=17358053274, sex=), User(id=7, username=酆雨寒, grade=高一(5), age=19, phone=15394214112, sex=), User(id=8, username=郑春阳, grade=小三(7), age=24, phone=15004202411, sex=)]

id从6开始到10结束,跳过offset,到limit之前结束

4.插件实现

5.拓展limit 性能优化

例如,要从mark_info表中选择选择最新创建的第11到第20个工单的信息,可以执行以下查

SELECT * FROM mark_info ORDER BY CREATE_TIME DESC LIMIT 10 OFFSET 10;
或者

SELECT * FROM mark_info ORDER BY CREATE_TIME DESC LIMIT 10 , 10;

写法等价

参考文档

Mybatis的五种分页方式详解
mybatis中的RowBounds分页简单原理
SQL中Limit关键字的使用
MySQL 的 limit 分页查询及性能问题
MySQL分页查询详解:优化大数据集的LIMIT和OFFSET
LIMIT和OFFSET的高性能分页优化逻辑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值