好网站范例,免费软件app下载,网页设计公司简介范文,文明网站机制建设键盘敲烂#xff0c;年薪30万#x1f308; 目录
一、SQL的预编译
#x1f4d5;一条SQL语句的执行过程
#x1f4d5;弊端
#x1f4d5;预编译SQL的优势
#x1f4d5;两种参数占位符
#x1f4d5;小结
二、动态SQL
#x1f4d5;概念介绍#xff1a;
#x1f4… 键盘敲烂年薪30万 目录
一、SQL的预编译
一条SQL语句的执行过程
弊端
预编译SQL的优势
两种参数占位符
小结
二、动态SQL
概念介绍
案例
动态SQL语句
应用场景总结
三、总结 一、SQL的预编译
一条SQL语句的执行过程 弊端
3条SQL语句都是删除操作但是经过语法解析优化编译会生成3条不同的SQL语句降低性能也浪费空间。
delete from emp where id 1;
delete from emp where id 2;
delete from emp where id 3;
//优化后执行3条不同的SQL语句 预编译SQL的优势
使用参数占位符#{}替代预编译生成的SQL语句相同故第二次、第三次省去了解析和优化过程提高性能
delete from emp where id #{id};
-- 预编译后的SQL语句
delete from emp where id ?; 预编译可防止SQL注入 下面是一个登户登录的校验当你输入用户名和密码点击登录信息传到服务器服务器端会从User表中查询有无该用户以下是两种SQL语句的差别。 -- 用户登录校验
select username, password from user where username张三 and password123-- 普通语句
select username, password from user where usernamesaggd and password or 11;-- 预编译SQL安全
select username, password from user where username? ans password?; 小结 普通语句编译后会将参数以字符串的形式拼接到SQL语句中这就造成了语句的恒成立 预编译SQL编译后将参数整体视为一个字符串当语句开始执行时才进行替换 两种参数占位符
#{}
执行SQL时会将#{…}替换为?生成预编译SQL会自动设置参数值。使用时机参数传递都使用#{…}
${}
拼接SQL。直接将参数拼接在SQL语句中存在SQL注入问题。使用时机如果对表名、列表进行动态设置时使用。 小结 预编译SQL利用参数占位符编译生成的SQL语句相同性能高效 可防止SQL注入 二、动态SQL
概念介绍
随着用户的输入或外部条件的变化而变化的SQL语句我们称为 动态SQL。
案例 动态SQL语句 if用于判断条件是否成立。使用test属性进行条件判断如果条件为true则拼接SQL。 用法test属性为if的判断条件
实现例如动态sql实现条件查询 !-- 动态sql - if--select idselect resultTypecom.itpan.pojo.Empselect *from empwhereif testname ! nullname like concat(%, #{name}, %)/ifif testgender ! nulland gender #{gender}/ifif testbegin ! null and end ! nulland entrydate between #{begin} and #{end}/if/whereorder by update_time desc/select 注意 如果name字段为空sql语句为select * from emp where and gender #{gemder}…… 引入where/where标签 where 元素只会在子元素有内容的情况下才插入where子句。而且会自动去除子句的开头的AND 或OR 同理update时也要引入set/set标签去除多余 foreach遍历集合或数组给字段赋值 属性介绍
collection:集合或数组名item:要分割的字段名separator:每次遍历的分隔符open:遍历开始前拼接的片段close:遍历开始后拼接的片段
实现例如实现批量删除
!-- 批量删除元素--
!-- ids是ListInteger集合delete iddeleteByIddelete from emp where id inforeach collectionids itemid separator, open( close)#{id}/foreach/delete sql与include sql定义可重用的 SQL 片段。include通过属性refid指定包含的sql片段。 应用场景总结
if
用于判断条件是否成立如果条件为true则拼接SQL。形式if testname ! null…/if
where
where 元素只会在子元素有内容的情况下才插入where子句而且会自动去除子句的开头的AND 或OR
set
动态地在行首插入 SET 关键字并会删掉额外的逗号。用在update语句中
foreach
遍历集合或数组给字段赋值形式foreach collection集合或数组名 item字段名 separator, open( close)
sqlinclude
sql封装相同代码 include引入 三、总结 动态SQL是重点也是我们开发中最为常用的SQL语句 #{} 与 ${}占位符有什么区别 - 大厂面试题 预编译SQL的优势