Java中Mybatis分页查询的四种传参方式

 更新时间:2023年03月31日 09:45:26   作者:会洗碗的CV工程师  
这篇文章主要介绍了Java中Mybatis分页查询的四种传参方式:顺序传参,@param传参,自定义POJO类传参,Map传参,想详细了解传参方式的小伙伴可以详细阅读本文,有一定的而参考价值

 如果我们也想要像下图那种分页查询的方式,那么我们应该怎么做才可以呢?

分页查询时,Sql语句使用limit关键字,需要传入开始索引和每页条数两个参数。MyBatis的多参数处理有以下方式:

一、顺序传参

Sql中的参数使用arg0,arg1...或param1,param2...表示参数的顺序。此方法可读性较低,在开发中不建议使用。但是我这里测试的时候,参数可以随便定义的,并不一定按照上述的格式来定义

 1. 持久层接口方法

/**
     * 分页查询 -- 顺序传参
     * @param startIndex 开始索引
     * @param pageSize 每页条数
     * @return
     */
    List<User> findPage(int startIndex,int pageSize);

2. UserMapper.xml映射文件新增标签

<!-- 分页查询-顺序传参 -->
    <select id="findPage" resultType="com.mybatisstudy.pojo.User">
        select * from user limit #{param1},#{param2}
    </select>

这里我发现不用定义参数类型类型也可以 

3. 新增测试方法

// 测试分页查询方法 -- 顺序传参
    @Test
    public void testFindPage(){
        List<User> users = userMapper.findPage(0,3);
        users.forEach(System.out::println);
    }

4. 运行结果

由于这里的起始条数是从0开始,数据的id从1开始,所以,别惊讶

二、@param传参

在接口方法的参数列表中通过@Param定义参数名称,在Sql语句中通过注解中所定义的参数名称指定参数位置。此方式参数比较直观的,推荐使用。

 1. 持久层接口方法

/**
     * 分页查询 -- @param传参
     * @param startIndex 开始索引
     * @param pageSize 每页条数
     * @return
     */
    List<User> findPage1(@Param("startIndex")int startIndex,@Param("pageSize")int pageSize);

2. UserMapper.xml映射文件新增标签

<!-- 分页查询-@param传参 -->
    <select id="findPage1" resultType="com.mybatisstudy.pojo.User">
        select * from user limit #{startIndex},#{pageSize}
    </select>

注意,这里里面的参数就一定要和持久层接口的参数一致,否则就会报错 

 3. 新增测试方法

// 测试分页查询方法 -- @param传参
    @Test
    public void testFindPage1(){
        List<User> users = userMapper.findPage1(3,3);
        users.forEach(System.out::println);
    }

4. 运行结果

三、自定义POJO类传参

自定义POJO类,该类的属性就是要传递的参数,在SQL语句中绑定参数时使用POJO的属性名作为参数名即可。此方式推荐使用。

 1. 自定义POJO类

由于这里我们需要两个参数,一个是查询开始条数,一个是每页有多少条数,所以这个pojo类只需要两个参数即可

package com.mybatisstudy.pojo;
 
public class PageQuery {
    private int startIndex;
    private int pageSize;
 
    public PageQuery(int i, int i1) {
        this.startIndex = i;
        this.pageSize = i1;
    }
 
    public int getStartIndex() {
        return startIndex;
    }
 
    public void setStartIndex(int startIndex) {
        this.startIndex = startIndex;
    }
 
    public int getPageSize() {
        return pageSize;
    }
 
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
}

2. 持久层接口方法

/**
     * 分页查询 -- POJO传参
     * @param PageQuery
     * @return
     */
    List<User> findPage2(PageQuery pageQuery);

3. UserMapper.xml映射文件新增标签

<!-- 分页查询-POJO传参 -->
    <select id="findPage2" resultType="com.mybatisstudy.pojo.User" parameterType="com.mybatisstudy.pojo.PageQuery">
        select * from user limit #{startIndex},#{pageSize}
    </select>

   这里同样需要注意的是,参数名称要和自定义的POJO类的成员变量名要一致,否则同样会报错 

 4. 新增测试方法

// 测试分页查询方法 -- POJO传参
    @Test
    public void testFindPage2(){
        PageQuery pageQuery = new PageQuery(2,3);
        List<User> users = userMapper.findPage2(pageQuery);
        users.forEach(System.out::println);
    }

5. 运行结果

四、Map传参

如果不想自定义POJO,可以使用Map作为传递参数的载体,在SQL语句中绑定参数时使用Map的Key作为参数名即可。此方法推荐使用

 1. 持久层接口方法

/**
     * 分页查询 -- Map传参
     * @param Map
     * @return
     */
    List<User> findPage3(Map<String,Object> params);

2. UserMapper.xml映射文件新增标签

<!-- 分页查询-Map传参 -->
    <select id="findPage3" resultType="com.mybatisstudy.pojo.User" parameterType="map">
        select * from user limit #{startIndex},#{pageSize}
    </select>

这里同样需要注意的是,参数个数要和你map集合的个数一致,并且参数名称要和map集合里面的key的名称要一致,否则同样报错

 3. 新增测试方法

// 测试分页查询方法 -- Map传参
    @Test
    public void testFindPage3(){
        Map<String,Object> params = new HashMap<>();
        params.put("startIndex",0);
        params.put("pageSize",4);
        List<User> users = userMapper.findPage3(params);
        users.forEach(System.out::println);
    }

4. 运行结果

OK,以上就是mybatis分页查询时可以用到的四种传参方式,简单易上手,快来和我一起操作吧 ~

到此这篇关于Mybatis分页查询的四种传参方式的文章就介绍到这了,更多相关Mybatis分页查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解SpringBoot中关于%2e的Trick

    详解SpringBoot中关于%2e的Trick

    这篇文章主要介绍了SpringBoot中关于%2e的Trick,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • 使用Postman传递arraylist数据给springboot方式

    使用Postman传递arraylist数据给springboot方式

    这篇文章主要介绍了使用Postman传递arraylist数据给springboot方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Java中的zookeeper常用命令详解

    Java中的zookeeper常用命令详解

    这篇文章主要介绍了Java中的zookeeper常用命令,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Java定时器Timer使用方法详解

    Java定时器Timer使用方法详解

    这篇文章主要为大家详细介绍了Java定时器Timer的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Java并发编程(CyclicBarrier)实例详解

    Java并发编程(CyclicBarrier)实例详解

    这篇文章主要介绍了Java并发编程(CyclicBarrier)实例详解的相关资料,JAVA编写并发程序的时候,我们需要仔细去思考一下并发流程的控制,如何让各个线程之间协作完成某项工作。
    2017-07-07
  • JAVA使用动态代理对象进行敏感字过滤代码实例

    JAVA使用动态代理对象进行敏感字过滤代码实例

    这篇文章主要介绍了JAVA使用动态代理对象进行敏感字过滤代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Java开发岗位面试被问到反射怎么办

    Java开发岗位面试被问到反射怎么办

    这篇文章主要介绍了java 面向对象面试集锦的相关资料,这里整理了面向对象的基础知识,帮助大家学习理解此部分的知识,需要的朋友可以参考下
    2021-07-07
  • MyBatis中的连接池及事物控制配置过程

    MyBatis中的连接池及事物控制配置过程

    连接池就是用于存储数据库连接的一个容器,容器其实就是一个集合对象,本文给大家介绍MyBatis中的连接池以及事物控制的相关知识,感兴趣的朋友一起看看吧
    2021-05-05
  • 举例解析Java的图像缓冲技术的使用

    举例解析Java的图像缓冲技术的使用

    这篇文章主要介绍了Java的图像缓冲技术的使用,使用到了Java的awt.image包,需要的朋友可以参考下
    2015-10-10
  • Java实现多个文档合并输出到一个文档

    Java实现多个文档合并输出到一个文档

    这篇文章主要为大家详细介绍了Java实现多个文档合并输出到一个文档的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10

最新评论