Mybatis使用之分页

本文介绍了Mybatis实现分页的两种方法:一是通过传递参数到映射文件,直接在SQL中处理分页;二是利用拦截器在执行SQL前动态改造为分页SQL。拦截器方式在执行前拦截SQL,改造后继续执行,并可获取总记录数。文中还给出了Page实体类、拦截器配置和映射接口等相关代码示例。
摘要由CSDN通过智能技术生成

Mybatis使用之分页

 

一:简介

 

注:示例基于mysql数据库。Oracle可以自行测试。

 

    使用Mybatis分页主要有两种方式、一种是将分页参数传递到配置文件中、在写sql的时候就做分页。另一种是使用Mybatis的拦截器拦截需要分页的sql语句、重新组装成具有分页功能的sql语句。

分页查询的关键在于查询时需要告诉数据库从第几条开始取、取多少条记录。也就是常用到Page对象(一般是方便传递参数、自己构建的实体类)的pageNumer、pageSize两个主要参数。至于Page对象的总记录数等是需要带到前台构造数据展示表格时使用的参数。

 

二:传递参数形式的分页

 

2.1 关键点

 

    传递参数形式的分页就是将分页信息以参数的形式传递到映射文件中、这样就可以在编写具体的sql语句时实现分页功能。这种方式的重点在于一般的查询语句都会带有一个或者多个查询参数、而'select'标签的parameterType只能接收一个值。所以需要我们将查询参数与分页参数组装成一个Map作为参数传递到映射语句中。

不过前台展示所需要的数据总数还需要另写一条count查询语句来获取。多多少少会有些不便。

 

2.2 具体代码

 

    映射文件:

  

   <select id="selectAuthorWithPageParam"resultType="author" parameterType="hashMap">

       SELECT

           t.id,

           t.username,

           t.password,

           t.email,

           t.bio,

           t.favourite_section favouriteSection

       FROM author t

       WHERE t.username = {username} AND t.password = {password} limit {page.dbIndex},{page.dbNumber}

   </select>

    映射接口:

   List<Author> selectAuthorWithPageParam(Map<String, Object>map);

  

    测试代码:

  

   @Test

   public void testSelectAuthorWithPageParam() throws Exception {

       Page page = new Page();

       page.count();

       Map<String, Object> map = new HashMap<>();

       map.put("page", page);

       map.put("username", "alien");

        map.put("password","alien");

       List<Author> authors =this.authorMapper.selectAuthorWithPageParam(map);

       Assert.assertEquals(5, authors.size());

    }

三:拦截器分页

 

3.1 关键点

 

    拦截器实现分页的关键之处在于、在需要分页的sql语句执行之前、拦截下来并改造成具有分页功能的sql语句(还可以查询一下总数、设置到Page

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值