• MyBatis 中如何实现分页 ?


    1. MyBatis 中如何实现分页 ?

    MyBatis 中的分页有两种实现方式:物理分页 or 逻辑分页

    【物理分页】

    1.1 原生 SQL 物理分页

    物理分页是通过 SQL 查询语句,LIMIT 语法进行分页的,它是在数据库引擎层面实现的。

    1. <select id="getAll" resultType="UserInfo">
    2. select * from userinfo
    3. limit #{limit} offset #{offset}
    4. select>

    1.2 PageHepler 插件实现分页

    物理分页还可以使用 PageHepler 插件来实现。

    代码示例:

    1. service、dao、xml 层查询整表数据 - getALl()
    2. service 接口,以及实现类新增分页方法 getAllByPage()
    3. controller 层调用分页方法即可。
    1. @Resource
    2. private UserMapper userMapper;
    3. public List getAll() {
    4. return userMapper.getAll();
    5. }
    6. public PageInfo getAllByPage(Integer pIndex, Integer pSize) {
    7. PageHelper.startPage(pIndex, pSize); // 关键代码
    8. List list = userMapper.getAll();
    9. PageInfo pageInfo = new PageInfo<>(list); // 关键代码
    10. return pageInfo;
    11. }

    【逻辑分页】

            使用 MyBatis 自带的 RowBounds 进行分页就是逻辑分页,它是一次性将符合条件的所有数据查询出来放到内存中,然后在内存中进行分页的,而且内存中是没有索引的,所以数据量非常大的时候,不建议使用。

    关键代码:

    1. RowBounds rowBounds = new RowBounds(offset,limit);
    2. List results = sqlSession.selectList("getUserList",null,rowBounds);

    面试官问:RowBounds 是一次性查询全部数据吗 ?

            答案是否。首先 MyBatis 是对 JDBC 的封装,而在 JDBC 驱动中有一个 Fetch Size 的配置,它规定了每次最多从数据库中查询出多少条数据。这个 Fetch Size 的默认值是 1000.

    于是我们可以在 xml 的 "getAll" resultType="UserInfo" fetchSize="100">

  • select * from userinfo;
  • 相关阅读:
    EMQX 入门教程①——EMQX 5.0 for CentOS 8 安装
    AI极客日报0908 - Zoom的AI新功能揭示;助听技术的未来趋势;ChatGPT与Canva的融合;机器人学习策略游戏
    SpringCloud微服务实践之三 创建子项目UserService
    android自定义View: 绘制图表(一)
    SpringCloud:Gateway服务网关
    云计算-Linux-查看内核-CPU,内存,网卡,主机名信息,修改主机名
    华为OD机考算法题:评论转换输出
    【日常踩坑】解决 kex_exchange_identification 报错
    Chapter006-FPGA学习之LCD显示
    深度学习分析NASA电池数据(1 数据读取)
  • 原文地址:https://blog.csdn.net/xaiobit_hl/article/details/132638896