键盘敲烂,年薪30万🌈
目录
一、SQL的预编译
📕一条SQL语句的执行过程
📕弊端
📕预编译SQL的优势
📕两种参数占位符
📕小结
二、动态SQL
📕概念介绍:
📕案例:
📕动态SQL语句:
📕应用场景总结:
三、总结:
delete from emp where id = 1; delete from emp where id = 2; delete from emp where id = 3; //优化后执行3条不同的SQL语句
delete from emp where id = #{id}; -- 预编译后的SQL语句 delete from emp where id = ?;
预编译可防止SQL注入
下面是一个登户登录的校验,当你输入用户名和密码,点击登录,信息传到服务器,服务器端会从User表中查询有无该用户,以下是两种SQL语句的差别。
-- 用户登录校验 select username, password from user where username='张三' and password='123' -- 普通语句 select username, password from user where username='saggd' and password='' or '1'='1'; -- 预编译SQL安全 select username, password from user where username=? ans password=?;
小结:
普通语句编译后会将参数以字符串的形式拼接到SQL语句中,这就造成了语句的恒成立
预编译SQL编译后将参数整体视为一个字符串,当语句开始执行时,才进行替换
#{}
${}
预编译SQL利用参数占位符编译生成的SQL语句相同,性能高效
可防止SQL注入
随着用户的输入或外部条件的变化而变化的SQL语句,我们称为 动态SQL。
用于判断条件是否成立。使用test属性进行条件判断,如果条件为true,则拼接SQL。
用法:test属性为if的判断条件
实现:例如动态sql实现条件查询
注意:
如果name字段为空,sql语句为select * from emp where and gender = #{gemder}……
引入
标签: where 元素只会在子元素有内容的情况下才插入where子句。而且会自动去除子句的开头的AND 或OR
同理update时也要引入
标签去除多余 ,
遍历集合或数组给字段赋值
属性介绍 :
实现:例如实现批量删除