MyBatis—增删查改操作

sql 复制代码
@Inset("insert into User(username,password,name,age) values(#{username},#{password},#{name},#{age})")
public void insert(User user);
// 注意:届时在括号内填的只是一个User类的对象,而不是上述的一个字段
|
|
|
User user = new User("...","...","...",...)
usermapper.insert(user);

sql 复制代码
					// 传统的写法:
@delete("delete from User where id = 5")
public void DeleteAll();

					// 占位符写法:
 1. #{}占位符
@delete("delete from User where id = #{id}")
public void DeleteAll(Integer id);
|
|
|
测试类中:
@Test
void Delete(){
	usermapper.DeleteAll(1);
}
// 区别:使用#{}来替代数字,在括号中定义好数据类型和变量,在测试类中赋入变量
 2. ${}占位符
@delete("delete from User where id = ${id}")
public void DeleteAll(Integer id);
|
|
|
测试类中:
@Test
void Delete(){
	usermapper.DeleteAll(1);
}

#{}${} 的区别:

在运行日志中,#{}会在id的位置上以一个?出现,也就是经历一个预编译的阶段。

而 ${}依旧会以原值出现

这就意味着,在字符串相关的sql语句中,使用#{}要比使用 {}来的安全, {}占位符若用在拼接字符串中,容易出现sql注入这种安全问题。

sql 复制代码
@Select("select * from User where id = #{id}, username = #{username}");
public void Select(String id,String username);
若是基于SpringBoot官方骨架创建出来的项目只需这样写就可以了

若不是,则需要这样写:
@Select("select * from User where id = #{id}, username = #{username}");
public void Select(@Param(id)String id,@Param(username)String username);
复制代码
原因:
1.@Param()是给参数起名字的,明确标注这个参数就是id/username,为什么要这么做,其实是因为在字节码文件中,参数id/username并不叫id/username,而是别的符号(arg0,arg1),这会使得MyBatis找不到参数,才需要设置@Param来让Mybatis知道这个值对应的就是这个参数
2.而基于SpringBoot骨架创建的项目,在pom.xml文件中有这样一个父类,如下图:

而进入这个父类的pom.xml文件中会发现:

< parameters > true < parameters >

的值是true,这就意味着不用再显式注明@Param()了,会自动按照括号内的参数名,来匹配实际括号中传进来的值,然后根据SQL语句中的参数名来返回。

复制代码
但是正因如此才要注意,括号内的参数名和SQL语句中的对应的参数名一定要一致,不然到时候通过括号内参数名匹配到值了,但是无法从SQL语句中找到和括号中一样的参数名,这样就返不回去了。

sql 复制代码
@Upadate("update User set username = #{username}, password = #{password}, name = #{name}, id = #{id} where id = #{id}")
public void Update(User user);
|
|
|
void test(){
	User user  = new User("...","...","...", ... , ...);
	username.Update(user);
}
相关推荐
兩尛3 小时前
Spring面试
java·spring·面试
Java中文社群3 小时前
服务器被攻击!原因竟然是他?真没想到...
java·后端
Full Stack Developme3 小时前
java.nio 包详解
java·python·nio
零千叶4 小时前
【面试】Java JVM 调优面试手册
java·开发语言·jvm
代码充电宝4 小时前
LeetCode 算法题【简单】290. 单词规律
java·算法·leetcode·职场和发展·哈希表
li3714908904 小时前
nginx报400bad request 请求头过大异常处理
java·运维·nginx
摇滚侠4 小时前
Spring Boot 项目, idea 控制台日志设置彩色
java·spring boot·intellij-idea
Aevget5 小时前
「Java EE开发指南」用MyEclipse开发的EJB开发工具(二)
java·ide·java-ee·eclipse·myeclipse
黄昏晓x5 小时前
C++----多态
java·jvm·c++