MyBatis多参数查询解析

参考官网

1. 底层

  • 底层是ParamNameResolver类
  • 查看getNameParams方法实现

2. 获取参数的两种方式

MyBatis获取参数值的两种方式:

  • ${} : 本质就是字符串拼接
  • #{} :本质就是占位符赋值

3. 多种情况的获取情况

单参数情况:

a. 单参数-单个字面量类型

此时可以使用KaTeX parse error: Expected 'EOF', got '#' at position 4: {}和#̲{}以任意的名称获取参数的值,…{}需要手动加单引号

#{}写法:
select * from t_user where username = #{username}
${}写法: 
select * from t_user where username = '${username}

b. 单参数-对象类型-POJO类型

直接使用,属性名和参数占位符名称一致即可。

如:

@Mapper
public interface TbBrandMapper {List<TbBrand> selectByCondition(User user);
}

sql:

    <select id="selectByCondition" resultMap="BaseResultMap">select *from tb_userwhere status = #{status}and brand_name like #{brandName}and company_name like #{companyName}</select>

注:只要查询的参数占位符和对象的属性名一致即可。

c. 单参数-Map集合参数

直接使用,键名和参数占位符名称一致即可。和对象使用相似

如:

@Mapper
public interface TbBrandMapper {List<TbBrand> selectByCondition(Map map);
}

sql:

    <select id="selectByCondition" resultMap="BaseResultMap">select *from tb_userwhere status = #{status}and brand_name like #{brandName}and company_name like #{companyName}</select>

注:只要查询的参数占位符和map的key值一致即可。

d. 单参数-Collection

底层会封装到Map集合,可以使用@Param注解,替换Map集合中默认的arg键名

map中会存放:如下

map.put("arg0",collection集合);
map.put("collection",collection集合);

获取的时候,可以通过arg0获取,或collection获取。

*但是建议使用@Param注解,替换Map集合中默认的arg键名进行获取

如:

@Mapper
public interface TbBrandMapper {List<TbBrand> selectByCondition(@Param("coll") Collection coll);
}

map会覆盖掉arg:如:map变为

map.put("coll",collection集合);
map.put("collection",collection集合);

e. 单参数-LIit:

底层会封装到Map集合,可以使用@Param注解,替换Map集合中默认的arg键名

map中会存放:如下

map.put("arg0",List集合);
map.put("collection",List集合);
map.put("List",List集合);

获取的时候,可以通过arg0获取,或collection获取。

*但是建议使用@Param注解,替换Map集合中默认的arg键名进行获取

如:

@Mapper
public interface TbBrandMapper {List<TbBrand> selectByCondition(@Param("listtemp") List listtemp);
}

map会覆盖掉arg:如:map变为

map.put("listtemp",List集合);
map.put("collection",List集合);
map.put("List",List集合);

f. 单参数-array

底层会封装到Map集合,可以使用@Param注解,替换Map集合中默认的arg键名

map中会存放:如下

map.put("arg0",数组);
map.put("array",数组);

获取的时候,可以通过arg0获取,或collection获取。

*但是建议使用@Param注解,替换Map集合中默认的arg键名进行获取

如:

@Mapper
public interface TbBrandMapper {List<TbBrand> selectByCondition(@Param("arr") int[] arr);
}

map会覆盖掉arg:如:map变为

map.put("arr",数组);
map.put("array",数组);

g. 多个参数

底层会封装到Map集合,可以使用@Param注解,替换Map集合中默认的arg键名

map.put("argo",参数值1)
map.put("param1",参数值1)map.put("agr1",参数值2)
map.put("param2",参数值2)

如下案例:

List<TbBrand> selectByCondition(@Param("status") int status,@Param("companyName") String companyName,);

map如下:

map.put("status",参数值1)
map.put("param1",参数值1)map.put("companyName",参数值2)
map.put("param2",参数值2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/3331.shtml

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

相关文章

人脸清晰修复神器CodeFormer

随着AI技术在图像处理领域大展身手&#xff0c;AI去马赛克相关的项目也屡见不鲜&#xff0c;比如在Github上开源免费、备受欢迎的 CodeFormer 。不得不说利用这款神奇的人脸修复工具&#xff0c;真的是让我大开眼界&#xff0c;竟然可以这样搞&#xff01; 不管面对的是多么模…

Java知识总结-基础

Java中的访问权限修饰符 Java语言有四个权限访问修饰符&#xff0c;权限从大到小依次为&#xff1a; 1&#xff09;public &#xff1a;公共权限&#xff0c;可以被任意类访问&#xff0c;不同包不同类依然可以访问&#xff0c; 可修饰&#xff1a;类、成员变量、方法&#…

大模型+多模态实现

那么如何在预训练LLM的基础上引入跨模态的信息&#xff08;包括图像、语音、视频模态&#xff09;&#xff0c;让其变得更强大、更通用呢&#xff1f;本节将介绍“大模型多模态”的3种实现方法。 以LLM为核心&#xff0c;调用其他多模态组件 微软亚洲研究院&#xff08;MSRA&…

STM32中SPI通信的完整C语言代码范例

SPI (Serial Peripheral Interface) 是一种同步串行通信协议&#xff0c;广泛应用于嵌入式系统中&#xff0c;用于与外设进行数据交换。STM32系列微控制器提供了丰富的SPI外设&#xff0c;支持多种工作模式和配置选项。本文将以STM32F103系列为例&#xff0c;详细介绍SPI通信的…

Java基础(运算符)

运算符 运算符和表达式 运算符&#xff1a;对字面量或者变量进行操作的符号 表达式&#xff1a;用运算符把字面量或者变量连接起来&#xff0c;符合java语法的式子就可以称为表达式&#xff1b;不同运算符连接的表达式体现的是不同类型的表达式。 算术运算符&#xff08;加…

Linux基础命令[24]-su

文章目录 1. su 命令说明2. su 命令语法3. su 命令示例3.1 不加参数3.2 -&#xff08;登录&#xff09;3.3 -c&#xff08;执行命令&#xff09; 4. 总结 1. su 命令说明 su&#xff1a;以用户身份执行命令&#xff0c;基本信息如下&#xff1a; Usage:su [options] [-] [USE…

一些RabbitMQ面试题

RabbitMQ是什么&#xff0c;它的主要用途是什么 RabbitMQ是一个开源的消息代理软件&#xff0c; 它实现了高级消息队列协议&#xff08;AMQP&#xff09;&#xff0c; 主要用于在分布式系统之间进行可靠的异步通信。 它的主要用途包括解耦系统组件、提高系统可扩展性、实现消息…

数据结构四:线性表之带头结点的单向循环循环链表的设计

前面两篇介绍了线性表的顺序和链式存储结构&#xff0c;其中链式存储结构为单向链表&#xff08;即一个方向的有限长度、不循环的链表&#xff09;&#xff0c;对于单链表&#xff0c;由于每个节点只存储了向后的结点的地址&#xff0c;到了尾巴结点就停止了向后链的操作。也就…

架构师系列-消息中间件(九)- RocketMQ 进阶(三)-消费端消息保障

5.2 消费端保障 5.2.1 注意幂等性 应用程序在使用RocketMQ进行消息消费时必须支持幂等消费&#xff0c;即同一个消息被消费多次和消费一次的结果一样&#xff0c;这一点在使用RoketMQ或者分析RocketMQ源代码之前再怎么强调也不为过。 “至少一次送达”的消息交付策略&#xff…

Hive主要介绍

Hive介绍 hive是基于 Hadoop平台操作 HDFS 文件的插件工具 可以将结构化的数据文件映射为一张数据库表 可以将 HQL 语句转换为 MapReduce 程序 1.hive 是由驱动器组成&#xff0c;驱动器主要由4个组件组成&#xff08;解析器、编译器、优化器、执行器&#xff09; 2.hive本身不…

什么是Java中的代理模式?

Java中的代理模式&#xff08;Proxy Pattern&#xff09;是一种设计模式&#xff0c;用于在不改变原始对象&#xff08;也称为主题&#xff0c;Subject&#xff09;的代码的情况下&#xff0c;为原始对象提供代理对象&#xff0c;以控制对原始对象的访问。代理模式可以在不改变…

libtorch c10::IValue类解析,从IValue获取值

0. 简介 c10::IValue像一个数据容器&#xff0c;但是它又不用来直接存储数据&#xff0c;只是一层数据的封装。 怎么理解呢&#xff1f;c10::IValue可以存储torchscript里很多类型的数据&#xff0c;比如c10::IValue存储可能是一个Tensor&#xff0c;一组Tensor&#xff0c;或…

【安卓13-Framework】SystemUI定制之屏蔽下拉状态栏部分快捷按钮

1、需求 屏蔽下拉状态栏谷歌录屏、省电模式、二维码扫描器等快捷按钮。 2、修改路径 普及&#xff1a;安卓的SystemUI包提供了状态栏、导航栏、通知中心等重要的用户界面元素。 状态栏小部件UI显示修改路径&#xff1a;frameworks/base/packages/SystemUI/src/com/android/s…

Java虚拟机(jvm)常见问题总结

1.电脑怎样认识我们编写的Java代码 首先先了解电脑是二进制的系统&#xff0c;他只认识 01010101比如我们经常要编写 HelloWord.java 电脑是怎么认识运行的HelloWord.java是我们程序员编写的&#xff0c;我们人可以认识&#xff0c;但是电脑不认识 Java文件编译的过程 1. 程…

git lab 2.7版本修改密码命令

1.gitlab-rails console -e production Ruby: ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-linux] GitLab: 14.9.0-jh (51fb4a823f6) EE GitLab Shell: 13.24.0 PostgreSQL: 12.7 2根据用户名修改密码 user User.find_by(username: ‘username’) # 替换’use…

无人驾驶(移动机器人)路径规划之RRT与RRTStar算法及其matlab实现

在自动驾驶与移动机器人路径规划时&#xff0c;必定会用到经典的算法RRT与RRT Star。下面是RRT与RRTStar的matlab实现效果。可以发现RRTStar效果明显改善。 目录 一、效果比较 1.1 RRT算法效果&#xff08;黑色为障碍物&#xff0c;红色线为最终路径&#xff0c;蓝色三角形为…

十大经典排序算法之希尔排序。

希尔排序 (Shell Sort) ​ 希尔排序&#xff08;Shell Sort&#xff09;是一种改进的插入排序算法&#xff0c;它的基本思想是通过将待排序列表分割成若干个子列表&#xff0c;对每个子列表进行插入排序&#xff0c;然后逐步缩小子列表的间隔&#xff0c;直到间隔为1&#xff…

C++之STL-vector+模拟实现

目录 一、vector的介绍和基本使用的方法 1.1 介绍 1.2 迭代器 1.3 vector的一些基本使用 1.3.1 构造函数 1.3.2 迭代器 1.3.3 有关容量的接口 1.3.4 增删查改 二、模拟实现vector 2.1 成员变量 2.2 迭代器的实现 2.3 容量接口的实现 2.3.1 size函数实现 2.3.2 capa…

阿斯达年代记三强争霸新手开荒注意事项 搬砖攻略和注意问题分享

阿斯达年代记三强争霸新手开荒注意事项 搬砖攻略和注意问题分享 阿斯达年代三强争霸这款游戏刚开始公测就获得了玩家们的集体关注&#xff0c;这是一款根据影视剧改编的MMORPG游戏&#xff0c;玩家将置身于名为阿斯大陆的奇幻世界&#xff0c;加入阿斯达、亚高、不法者三大势力…

Prompt之美:如何设计提示词让大模型变“聪明”

目录 一. Prompt关键要素 二. Prompt技巧 三. 实战中的Prompt优化 四. 参考文献 一. Prompt关键要素 Prompt是一个简短的文本输入&#xff0c;用于引导AI模型生成特定的回答或执行特定任务。换句话说&#xff0c;Prompt是你与AI模型沟通的方式。一个好的Prompt可以让AI更准…