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

news2024/11/26 11:47:00

目录

一、顺序传参

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://www.coloradmin.cn/o/429268.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习中的学习率设置技巧与实现详解

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

【计算机网络】第二章 应用层 3

Email应用的特性 异步应用&#xff0c;方便用户 提供一对多通信 价格低廉 主要包含: o 用户代理(user agents,UA) o 邮件服务器(mail servers) o 邮件传输协议&#xff1a;SMTP o 邮件访问协议&#xff1a;POP3或IMAP 用户代理 o 客户端程序 o 提供编辑、发…

【Linux】认识协议

&#x1f387;Linux&#xff1a; 博客主页&#xff1a;一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a; 看似不起波澜的日复一日&#xff0c;一定会在某一天让你看见坚持…

【Java 编程语言】——JDK 安装

JDK 安装 文章目录JDK 安装一、JDK的选择与下载1.JDK的选择2.JDK的下载二、Java环境变量的配置一、JDK的选择与下载 1.JDK的选择 目前的JDK的版本更新很快&#xff0c;已经到了JDK20了。但是对于普通的开发或者学习人员来说&#xff0c;选择较为稳定的JDK是更为合适的选择。当…

干货丨AI常见问题及处理方法

AI软件在运行时经常会容易报错或者操作不成功&#xff0c;问题及处理方法分享给大家 01 当AI中色板里面没有颜色可选 原因&#xff1a;将图片素材直接以新窗口打开&#xff0c;所以显示的是位图文件。 解决办法&#xff1a;重新新建文件&#xff0c;然后将图片拖入新建文件中…

让Ai来告诉你Linux应该怎么学

今天在slack上添加了Claude&#xff0c;他属于ChatGPT的最强竞品&#xff0c;支持中文&#xff0c;体验非常舒适&#xff0c;也并不像国内某些自建AI那样弱智。 至于Linux要怎么学&#xff0c;就让Claude来回答吧。 你能告诉我Liunx应该怎么学吗&#xff1f; 学习Linux,我有…

Elasticsearch:使用 Elastic APM 监控 Android 应用程序

作者&#xff1a;Alexander Wert, Cesar Munoz 人们通过私人和专业的移动应用程序在智能手机上处理越来越多的事情。 拥有成千上万甚至数百万的用户&#xff0c;确保出色的性能和可靠性是移动应用程序和相关后端服务的提供商和运营商面临的主要挑战。 了解移动应用程序的行为、…

【Mysql系列】——详细剖析数据库中的存储引擎

【Mysql系列】——详细剖析数据库中的存储引擎&#x1f60e;前言&#x1f64c;存储引擎什么是存储引擎&#xff1f;Mysql的体系结构&#xff1a;Mysql的体系结构分为四层&#xff1a;连接层服务层引擎层存储层存储引擎的查看存储引擎的指定存储引擎的特点InnoDB介绍InnoDB特点I…

论文浅尝 | 大语言模型在in-context learning中的不同表现

笔记整理&#xff1a;毕祯&#xff0c;浙江大学博士&#xff0c;研究方向为知识图谱、自然语言处理链接&#xff1a;https://arxiv.org/pdf/2303.03846.pd本文是谷歌等机构最新发表的论文&#xff0c;旨在研究大模型上下文学习的能力。这篇论文研究了语言模型中的上下文学习是如…

数影周报:现代汽车发生数据泄露事件;淘宝天猫集团完成组织调整

本周看点&#xff1a;现代汽车发生数据泄露事件&#xff1b;微软会议应用Teams 新功能可禁用/启用脏话过滤器&#xff1b;欧洲隐私监管机构创建ChatGPT工作组&#xff1b;淘宝天猫集团完成组织调整&#xff1b;阿里巴巴再向Lazada投资3.529亿美元...... 数据安全那些事 现代汽车…

C语言数据结构-队列的知识总结归纳

队列的知识总结归纳一.队列的基本概念二.循环队列的顺序存储常见的基本操作以及详细图解1.队列的顺序存储结构类型定义2.初始化队列初始化队列示意图3.判断队空4.判断队列是否满的三种方法图示5.入队或进队入队的示意图6出队或退队出队的图示三. 队列的链式存储结构四. 链式队列…

AutoGPT自主人工智能用法和使用案例

介绍 AutoGPT是什么&#xff1a;自主人工智能&#xff0c;不需要人为的干预&#xff0c;自己完成思考和决策【比如最近比较热门的用AutoGPT创业&#xff0c;做项目–>就是比较消耗token】 AI 自己上网、自己使用第三方工具、自己思考、自己操作你的电脑【就是操作你的电脑…

缺省函数,函数重载,引用简单介绍的补充说明

TIPS 命名空间域的作用实际上相当于把部分变量的名称给他隔离起来&#xff0c;这样的话就可以减少变量名的冲突。命名空间是对全局域当中的这些变量啊&#xff0c;函数啊&#xff0c;类型啊进行一个封装与隔离&#xff0c;可以防止你和我之间的冲突&#xff0c;也可以防止与库…

leetcode:各位相加(数学办法详解)

前言&#xff1a;内容包括&#xff1a;题目&#xff0c;代码实现&#xff0c;大致思路 目录 题目&#xff1a; 代码实现&#xff1a; 大致思路&#xff1a; 题目&#xff1a; 给定一个非负整数 num&#xff0c;反复将各个位上的数字相加&#xff0c;直到结果为一位数。返回…

【云原生Docker】11-Docker镜像仓库

【云原生|Docker】11-Docker Registry(官方仓库) 文章目录【云原生|Docker】11-Docker Registry(官方仓库)前言docker registry简介操作示例hyper/docker-registry-web前言 ​ 前面我们所有的docker操作&#xff0c;使用的镜像都是在docker官方的镜像仓库下载&#xff0c;当然这…

总结825

学习目标&#xff1a; 4月&#xff08;复习完高数18讲内容&#xff0c;背诵21篇短文&#xff0c;熟词僻义300词基础词&#xff09; 今日复习&#xff1a; 手绘高数第11讲思维导图&#xff0c;回顾线性代数第一讲 学习内容&#xff1a; 第12讲二重积分视频&#xff0c;纠正11讲…

手势控制的机器人手臂

将向你展示如何构建机械手臂并使用手势和计算机视觉来控制它。下面有一个在开发阶段的机械手臂的演示视频。展示开发中的手臂的演示视频&#xff1a;https://youtu.be/KwiwetZGv0s如图所示&#xff0c;该过程首先用摄像头捕捉我的手及其标志。通过跟踪特定的界标&#xff0c;例…

300到400的蓝牙耳机有哪些推荐?2023年值得入手的性价比蓝牙耳机

今年依旧是真无线蓝牙耳机快速发展的一年&#xff0c;市面上都有着各式各样的蓝牙耳机&#xff0c;一时间难以辨认哪些款式更适合自己&#xff0c;今天给大家介绍的是300元左右的蓝牙耳机&#xff0c;那这个价位的耳机到底怎么样呢&#xff1f;其实&#xff0c;300左右的蓝牙耳…

Qt 窗口置顶

文章目录一、前言二、示例代码三、补充说明四、窗口透明五、参考一、前言 我们使用QT进行界面开发时&#xff0c;可能会遇到需要将窗口置顶的情况。最常见的就是&#xff0c;需要制作一个悬浮工具栏&#xff0c;悬浮菜单&#xff0c;甚至是悬浮的画板。这就意味这我们需要将这个…

Javascript40行代码实现基础MVC原理。

参考文章 M数据层 V视图 C控制器 先来一个dom结构&#xff0c;一个p标签&#xff0c;用来展示输入的内容&#xff0c;一个input标签&#xff0c;用来输入内容⬇️ <p id"mvcp"></p> <input id"mvc"></input>创建Model类&#x…