MyBatis框架-分页的实现

MyBatis分页的实现

思考:为什么需要分页?

在学习mybatis等持久层框架的时候,会经常对数据进行增删改查操作,使用最多的是对数据库进行查询操作,如果查询大量数据的时候,我们往往使用分页进行查询,也就是每次处理小部分数据,这样对数据库压力就在可控范围内。

不同的数据库使用sql分页的方式也不一样。

Mysql使用Limit实现分页

-- 语法
SELECT * FROM table LIMIT stratIndex,pageSize
-- 检索记录行 6-15   
SELECT * FROM table LIMIT 5,10;
-- 为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
-- 检索记录行 96-last.   
SELECT * FROM table LIMIT 95,-1; 
-- 如果只给定一个参数,它表示返回最大的记录行数目:
-- 检索前 5 个记录行
SELECT * FROM table LIMIT 5; 
-- 换句话说,LIMIT n 等价于 LIMIT 0,n。

普通分页

UserMapper.java
//分页查询
List<User> selectUserLimit(Map<String,Integer> map);
UserMapper.xml
<select id="selectUserLimit" resultType="com.sin.pojo.User" parameterType="map">
    select * from user limit #{startIndex},#{pageSize}
</select>
测试用例
//分页查询 , 两个参数startIndex , pageSize
@Test
public void selectUserLimit(){
    SqlSession session = MyBatisUtil.getSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    int currentPage = 1;  //第几页
    int pageSize = 2;  //每页显示几个
    Map<String,Integer> map = new HashMap<String,Integer>();
    map.put("startIndex",(currentPage-1)*pageSize);
    map.put("pageSize",pageSize);
    List<User> users = mapper.selectUserLimit(map);
    for (User user: users){
        System.out.println(user);
    }
    session.close();
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

PageHelper 插件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

官方文档:https://pagehelper.github.io/

支持常见的 12 种数据库。Oracle,MySql,MariaDB,SQLite,DB2,PostgreSQL,SqlServer 等

使用方法:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md

导入maven
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.2.1</version>
</dependency>
Mybatis-config.xml
<!-- 分页插件 -->
    <plugins>
        <!-- 制定PageInterceptor插件的路径 -->
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!-- 数据库类型 -->
            <property name="helperDialect" value="mysql"/>
            <!-- 表示是否启用合理化分页,默认为false,
                如果设置为true,在查询页数小于1时会自动修正为1,大于总页数时会自动修正为总页数。
             -->
            <property name="reasonable" value="true"/>
        </plugin>
    </plugins>
Mapper
public interface StudentMapper {
    //获取所有学生及对应老师的信息
    public List<Student> getStudents();
}
Mapper.xml
<!-- 用于查询学生的方法,resultMap:找到resultMap的id="StudentTeacher"映射 -->
<select id="getStudents" resultMap="StudentTeacher">
  select * from student
</select>
测试用例
 @Test
    public void selectUser2(){
        /**
         * 开始分页
         * @param pageNum = 1  页码
         * @param pageSize = 5 每页显示数量
         */
        PageHelper.startPage(1,5);
        SqlSession session = MyBatisUtil.getSession();
        StudentMapper mapper = session.getMapper(StudentMapper.class);
        List<Student> users = mapper.getStudents();
        PageInfo<Student> info = new PageInfo<>(users);
        System.out.println("当前页"+info.getPageNum());
        System.out.println("每页的数量"+info.getPageSize());
        System.out.println("当前页的数量"+info.getSize());
        System.out.println("总页数"+info.getPages());
        System.out.println("上一页"+info.getPrePage());
        System.out.println("下一页"+info.getNextPage());
        //所有导航页号
        int[] nums = info.getNavigatepageNums();
        for (int num : nums) {
            System.out.println("第"+num+"页");
        }
        users.forEach(user -> System.out.println(user));
    }

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陆卿之

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值