当前位置:首页 » 《随便一记》 » 正文

Mybatis分页查询——四种传参方式

20 人参与  2023年04月15日 08:09  分类 : 《随便一记》  评论

点击全文阅读


目录

一、顺序传参

1. 持久层接口方法

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

3. 新增测试方法

4. 运行结果

二、@param传参

1. 持久层接口方法

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

3. 新增测试方法

4. 运行结果

三、自定义POJO类传参

1. 自定义POJO类

2. 持久层接口方法

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

4. 新增测试方法

5. 运行结果

四、Map传参

1. 持久层接口方法

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

3. 新增测试方法

4. 运行结果


 

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

         分页查询时,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分页查询时可以用到的四种传参方式,简单易上手,快来和我一起操作吧 ~ 


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/59584.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 高分_李象小说(大唐之最强皇太孙)(李象)全本完整阅读
  • 他在回忆尽头::结局+番外评价五颗星-许清梨贺南舟:结局+番外新上热文
  • 叶薇,萧逸璃纹双璧,情定此生电子书+番外篇章+(璃纹双璧,情定此生)免费版在线阅读
  • 林蔓枝,墨冽完结篇(身怀空间,我在兽世荒漠养兽夫)章节:结局+番外评价五颗星
  • 我被虐杀装进花瓶后,跪求我出山的首富悔疯了林璐璐,沈崇山,沈耀+后续+番外必读文-(我被虐杀装进花瓶后,跪求我出山的首富悔疯了)林璐璐,沈崇山,沈耀后续+番外精编之作笔趣阁
  • 季先生,您前妻算卦超灵!最新章节_白笙季云霆看点十足_小说后续在线阅读_无删减免费完结_
  • 恶雌会读心?五个兽夫追着我求宠阮阮:+后续+番外+附加(阮阮)清爽版阅读
  • 璃纹双璧,情定此生全篇完整在线阅读(叶薇,萧逸)热门章节列表
  • 静默奔溃无广告阅读_沈铮静姐陈静精心编著_小说后续在线阅读_无删减免费完结_
  • 男友装穷考验我99次,我转身继承首(谢先生,谢邸,谢夫人)全书免费_(谢先生,谢邸,谢夫人)男友装穷考验我99次,我转身继承首后续(谢先生,谢邸,谢夫人)
  • 被吃绝户?侯门主母二嫁权臣(裴轻寂,沈荣宁):结局+番外评价五颗星
  • 为了给养妹拍纪录片,男友让我去演陪酒妹全文+后续_弟弟许寒许安然每日分享_小说后续在线阅读_无删减免费完结_

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1