Mybatis实现分页

摘要:Mybatis笔记_06-2021-06-16

1.limit

limit:用于限定查询结果返回的数量,常用于分页查询,按照我们给定的数,返回定量的值。

  • SQL语句:select * from table_name limit m,n;
  • table_name:表的名称
  • m:索引值,即从哪条数据开始查询
  • n:分量值,即这一页显示多少条数据

实现例子:

UserMapper.java

    //查询所有用户,并进行分页显示
    List<User> getUserListByLimit(Map<String,Integer> map);

UserMapper.xml

    <!--查询所有用户,并进行分页显示-->
    <select id="getUserListByLimit" parameterType="map" resultMap="t_user">
        select *
        from t_user
        limit ${m},${n};
    </select>

UserMapperTest

	//查询所有用户,并进行分页显示
    @Test
    public void getUserListByLimitTest() {
        //1.获取SQLSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2.获取SqlSession绑定的接口类,然后通过接口实现方法
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //3.定义一个map对象,用于传参
        Map<String, Integer> map = new HashMap<String, Integer>();
        map.put("m",0);
        map.put("n",3);
        //4.测试方法
        List<User> userList = mapper.getUserListByLimit(map);
        for (User user : userList) {
            System.out.println(user);
        }
        //5.关闭资源
        sqlSession.close();
    }

结果:
在这里插入图片描述

2.RowBounds

RowBounds :了解即可,不推荐使用

  • 原理: 截取sql 查询结果的基础数据
  • 不适用数据量大的sql查询中
  • 适合在返回数据结果较少的查询

UserMapper.java

    //查询所用用户,通过RowBounds进行分页显示
    List<User> getUserListByRowBounds();

UserMapper.xml

    <!--查询所用用户,通过RowBounds进行分页显示-->
    <select id="getUserListByRowBounds" resultMap="t_user">
        select *
        from t_user;
    </select>

UserMapperTest.java

	//查询所用用户,通过RowBounds进行分页显示
    @Test
    public void getUserListByRowBoundsTest() {
        //1.获取SQLSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //2.通过RowBounds实现分页
        RowBounds rowBounds = new RowBounds(0,3);
        //3.通过java代码层面实现分页,面向对象
        List<User> userList = sqlSession.selectList("com.riove.dao.UserMapper.getUserListByRowBounds",null,rowBounds);
        for (User user : userList) {
            System.out.println(user);
        }
        //4.关闭资源
        sqlSession.close();
    }

结果:

在这里插入图片描述

RowBounds源码:
在这里插入图片描述

3.PageHelper

PageHelper中文文档:https://pagehelper.github.io/docs/howtouse/

使用方法

1.在 pom.xml 中添加依赖

2.

helperDialect:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置helperDialect属性来指定分页插件使用哪种方言。

offsetAsPageNum:默认值为 false,该参数对使用 RowBounds 作为分页参数时有效。 当该参数设置为 true 时,会将 RowBounds 中的 offset 参数当成 pageNum 使用,可以用页码和页面大小两个参数进行分页。

rowBoundsWithCount:默认值为false,该参数对使用 RowBounds 作为分页参数时有效。 当该参数设置为true时,使用 RowBounds 分页会进行 count 查询。

pageSizeZero:默认值为 false,当该参数设置为 true 时,如果 pageSize=0 或者 RowBounds.limit = 0 就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是 Page 类型)。

reasonable:分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。

更多详细参数信息:PageHelper中文文档:https://pagehelper.github.io/docs/howtouse/

5.调用方式

    //第一种,RowBounds方式的调用
    List<Country> list = sqlSession.selectList("x.y.selectIf", null, new RowBounds(0, 10));

    //第二种,Mapper接口方式的调用,推荐这种使用方式。
    PageHelper.startPage(1, 10);
    List<Country> list = countryMapper.selectIf(1);

    //第三种,Mapper接口方式的调用,推荐这种使用方式。
    PageHelper.offsetPage(1, 10);
    List<Country> list = countryMapper.selectIf(1);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值