MyBatis学习(二)--MyBatis获取参数值的两种方式

1、搭建新的module:mybatis_parameter

MyBatis获取参数值的两种方式:${}#{}

${}的本质就是字符串拼接,采用sql拼接,无法防止sql注入

#{}的本质就是占位符赋值 ,采用预编译 防止sql注入

不同参数使用案例

2、单个字面量类型的参数  int i = 1;

如果mapper接口中的方法参数为单个的字面量类型,此时可以使用#{}${}以任意的名称获取参数的值,如果使用${},注意需要手动添加单引号。

select * from user where username = #{username};
打印结果:Preparing: select * from user where username = ?;
select * from user where username = '${username}';
打印结果:Preparing: select * from user where username = 'qqq'

#方式可以防止SQL注入

//$的不加单引号会如下报错
select * from user where username = ${username};
Unknown column 'qqq' in 'where clause'
3、多个字面量类型的参数

如果mapper接口中的方法参数为多个时,此时MyBatis会自动将这些参数放在一个map集合(keyvalue)中,以arg0, arg1...为键,以参数为值;或者以param1, param2...为键,以参数为值。因此只需要通过#{}${}访问map集合的键就可以获取相对于的值,如果使用${},注意需要手动添加单引号。

//验证账号密码是否正确
User checkLogin(String username,String password);

//对应sql语句
select * from user where username = #{arg1} and password = #{arg0}
select * from user where username = #{param1} and password = #{param2}
select * from user where username = '${arg1}' and password = '${arg0}'
select * from user where username = '${param1}' and password = '${param2}'
4、map集合类型的参数

如果mapper接口中的方法参数为多个时,此时可以手动创建一个map集合,将这些参数放在map集合中,只需要通过#{}${}访问map集合的键(自己定义的键)就可以获取相对于的值,如果使用${},注意需要手动添加单引号。

//使用Map验证登录
User checkLoginByMap(Map<String,Object> map);

//对应测试类
@Test
public void testCheckLoginMap(){
    Map<String,Object> map = new HashMap<>();
    map.put("username","qqq");
    map.put("password","456");
    User user = mapper.checkLoginByMap(map);
    System.out.println(user);
}

正确写法(要写自己创建的key)

select * from user where username = #{username} and password = #{password}

对应正确结果

否则返回结果为空

select * from user where username = #{param1} and password = #{param1}

返回结果:null

5、实体类类型的参数  用的较多

如果mapper接口中的方法参数为实体类对象时,此时可以使用#{}${},通过访问实体类对象中的属性名称获取属性值,如果使用${},注意需要手动添加单引号

//向User表插入用户信息
int insertUser(User user);

//对应sql语句
insert into user values(null,#{username},#{password},#{age},#{sex},#{email})
6、使用@Param标识参数

可以通过@Param注解标识mapper接口中的方法参数,此时MyBatis会将这些参数放在map集合中,以@Param注解的value属性值为键,以参数为值;以param1,param2...为键,以参数为值;只需要通过#{}${}访问map集合的键就可以获取相对于的值,如果使用${},注意需要手动添加单引号。

//通过Param验证登录信息正确性
User checkLoginByParam(@Param("username") String username,@Param("password")String password);

//对应sql
//@Param注解的value属性值为键,以参数为值
select * from user where username = '${username}' and password = '${password}'
//以param1,param2...为键,以参数为值
select * from user where username = '${param1}' and password = '${param2}'

错误写法:

select * from user where username = #{aaa} and password = #{bbb}
提示信息:
 Parameter 'aaa' not found. Available parameters are [password, param1, username, pa

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习-06-手动进行反向传播

深度学习-06-手动进行反向传播 本文是《深度学习入门2-自製框架》 的学习笔记&#xff0c;记录自己学习心得&#xff0c;以及对重点知识的理解。如果内容对你有帮助&#xff0c;请支持正版&#xff0c;去购买正版书籍&#xff0c;支持正版书籍不仅是尊重作者的辛勤劳动&#xf…

O2O : Finetuning Offline World Models in the Real World

CoRL 2023 Oral paper code Intro 算法基于TD-MPC&#xff0c;利用离线数据训练世界模型&#xff0c;然后在线融合基于集成Q的不确定性估计实现Planning。得到的在线数据将联合离线数据共同训练目标策略。 Method TD-MPC TD-MPC由五部分构成: 状态特征提取 z h θ ( s ) …

Amazon Q Developer 实战:从新代码生成到遗留代码优化(下)

简述 本文是使用 Amazon Q Developer 探索如何在 Visual Studio Code 集成编程环境&#xff08;IDE&#xff09;&#xff0c;从新代码生成到遗留代码优化的续集。在上一篇博客《Amazon Q Developer 实战&#xff1a;从新代码生成到遗留代码优化&#xff08;上&#xff09;》中…

java基础篇(1)

JDK是什么?有哪些内容组成?JDK是Java开发工具包 JVM虚拟机: Java程序运行的地方 核心类库: Java已经写好的东西&#xff0c;我们可以直接用开发工具: javac、java、jdb、jhat.. JRE是什么?有哪些内容组成? JRE是Java运行环境 JVM、核心类库、运行工具 JDK&#xff0c;JRE&…

Linux网络编程:传输层协议|UDP|TCP

知识引入&#xff1a; 端口号&#xff1a; 当应用层获得一个传输过来的报文时&#xff0c;这时数据包需要知道&#xff0c;自己应该送往哪一个应用层的服务&#xff0c;这时就引入了“端口号”&#xff0c;通过区分同一台主机不同应用程序的端口号&#xff0c;来保证数据传输…

Java1.8基于BS版 vue+ uniapp+ springboot专业团队自主研发的一套上门家政APP系统成品源码,支持商用(后台端介绍)

Java1.8基于BS版 vue uniapp springboot专业团队自主研发的一套上门家政APP系统成品源码&#xff0c;支持商用&#xff08;后台端介绍&#xff09; 家政服务后台端 家政服务后台端是一个专为家政服务行业设计的管理系统&#xff0c;用于处理业务运营、用户端管理、师傅端调度、…

Spring boot 随笔 1 DatasourceInitializer

0. 为啥感觉升级了 win11 之后&#xff0c;电脑像是刚买回来的&#xff0c;很快 这篇加餐完全是一个意外&#xff1a;时隔两年半&#xff0c;再看 Springboot-quartz-starter 集成实现的时候&#xff0c;不知道为啥我的h2 在应用启动的时候&#xff0c;不能自动创建quartz相关…

FL Studio怎么给钢琴加延音 FL Studio怎么用钢琴做伴奏

在使用钢琴音色进行音乐创作的时候&#xff0c;可以对钢琴进行延音处理&#xff0c;这样处理的音色给人的感觉会更加的饱满丰富&#xff0c;同时&#xff0c;给钢琴加了延音之后&#xff0c;钢琴的声音时值也会相应的变长&#xff0c;听起来更加的柔和。今天就和大家讲一讲&…

STM32使用HAL库UART接收不定长数据-1

使用STM32的HAL库实现UART串口不定长数据的接收 使用STM32的UART接收数据的时候&#xff0c;经常会遇到接收长度不固定的数据&#xff0c;比如一帧数据可能是10个字节&#xff0c;也可能是12个字节。这种数据称为不定长数据。 现有的很多通信协议是不定长的&#xff0c;比如mo…

vue3_组件间通信方式

目录 一、父子通信 1.父传子&#xff08; defineProps&#xff09; 2.父传子&#xff08;useAttrs&#xff09; 3.子传父&#xff08;ref&#xff0c;defineExpose &#xff09; 4.子传父&#xff08;defineEmits&#xff09; 5.子传父&#xff08;v-model&#xff09; …

数据库 mysql 的彻底卸载

MySQL卸载步骤如下&#xff1a; &#xff08;1&#xff09;按 winr 快捷键&#xff0c;在弹出的窗口输入 services.msc&#xff0c;打开服务列表。 &#xff08;2&#xff09;在服务列表中&#xff0c; 找到 mysql 开头的所有服务&#xff0c; 右键停止&#xff0c;终止对应的…

【问题随记】tightvnc 连接后灰屏

问题描述 刚刚入手了官方发的 OrangePi AI Pro&#xff0c;想用 tight vnc 来连接开发板&#xff0c;就不用连接屏幕那么麻烦了。结果连接后&#xff0c;没能显示 OrangePi AI Pro 桌面。 问题解决 看一下现有的桌面环境。 apt list --installed | grep desktop从中可以看到…

游戏找不到d3dcompiler43.dll怎么办,分享5种有效的解决方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是找不到某个文件。其中&#xff0c;找不到d3dcompiler43.dll是一个常见的问题。这个问题通常出现在运行某些游戏或应用程序时&#xff0c;由于缺少了d3dcompiler43.dll文件&#xff0c;导致程…

【PTA】7-3 拯救007(C++)代码实现 易错点反思

题目见下: 输入样例 14 20 25 -15 -25 28 8 49 29 15 -35 -2 5 28 27 -29 -8 -28 -20 -35 -25 -20 -13 29 -30 15 -35 40 12 12 //输入上述数据后输出“Yes” AC代码如下: #include<bits/stdc++.h> using namespace std; #define sz 100 typedef struct node{int …

基于javacv ffmpeg 使用原生ffmpeg命令

基于javacv ffmpeg 使用原生ffmpeg命令 1. ffmpeg2. ffprobe 相关阅读&#xff1a; javacv ffmpeg使用笔记 测试过程中&#xff0c;发现ffmpeg-6.0-1.5.9-linux-x86_64.jar 存在问题&#xff08;ffmpeg原生命令执行失败&#xff09;&#xff0c;降级到ffmpeg-5.1.2-1.5.8-linux…

Mixly 开启WIFI AP UDP收发数据

一、开发环境 软件&#xff1a;Mixly 2.0在线版 硬件&#xff1a;ESP32-C3&#xff08;立创实战派&#xff09; 固件&#xff1a;ESP32C3 Generic(UART) 测试工工具&#xff1a;NetAssist V5.0.1 二、实现功能 ESP32开启WIFI AP&#xff0c;打印接入点IP地址&#xff0c;允许…

直播预告|手把手教你玩转 Milvus Lite !

Milvus Lite&#xff08;https://milvus.io/docs/milvus_lite.md&#xff09;是一个轻量级向量数据库&#xff0c;支持本地运行&#xff0c;可用于搭建 Python 应用&#xff0c;由 Zilliz 基于全球最受欢迎的开源向量数据库 Milvus&#xff08;https://milvus.io/intro&#xf…

Pandas读取文本文件为多列

要使用Pandas将文本文件读取为多列数据&#xff0c;你可以使用pandas.read_csv()函数&#xff0c;并通过指定适当的分隔符来确保正确解析文件中的数据并将其分隔到多个列中。 假设你有一个以逗号分隔的文本文件&#xff08;CSV格式&#xff09;&#xff0c;每一行包含多个值&a…

二分查找算法介绍(边界值、循环条件、值的变化、二分查找的原理、异常处理)

一、二分查找法原理介绍 二分查找是经典的查找算法之一&#xff0c;其原理也非常简单。 对于已排序的数组&#xff08;假设是整型&#xff0c;如果非整型&#xff0c;如果有排序和大小比较的定义&#xff0c;也可以使用二分查找&#xff09;&#xff0c;我们每次判断中间值与目…

单位企业是如何禁用USB接口的(公司禁止USB接口的三大方法)

在当前信息化时代&#xff0c;单位企业对于数据安全的重视程度日益增加&#xff0c;尤其是防止通过USB接口导致的数据泄露和恶意软件传播。 为了构建一个更加安全的办公环境&#xff0c;许多企业采取措施禁用USB接口。 以下是公司禁止USB接口的三大常用方法&#xff1a; 1. 部…
最新文章