首页 > Java > java教程 > 正文

Java中Mybatis分页查询的传参方式有哪些

王林
发布: 2023-05-19 10:16:19
转载
1049 人浏览过

一、顺序传参

在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. 运行结果

Java中Mybatis分页查询的传参方式有哪些

由于这里的起始条数是从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. 运行结果

Java中Mybatis分页查询的传参方式有哪些

三、自定义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. 运行结果

Java中Mybatis分页查询的传参方式有哪些

四、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. 运行结果

Java中Mybatis分页查询的传参方式有哪些

以上是Java中Mybatis分页查询的传参方式有哪些的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:yisu.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板