[MySQL] |
您所在的位置:网站首页 › 动态sql语句基本语法结构是什么 › [MySQL] |
键盘敲烂,年薪30万🌈 目录 一、SQL的预编译 📕一条SQL语句的执行过程 📕弊端 📕预编译SQL的优势 📕两种参数占位符 📕小结 二、动态SQL 📕概念介绍: 📕案例: 📕动态SQL语句: 📕应用场景总结: 三、总结: 一、SQL的预编译 📕一条SQL语句的执行过程预编译可防止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注入问题。使用时机:如果对表名、列表进行动态设置时使用。 📕小结预编译SQL利用参数占位符编译生成的SQL语句相同,性能高效 可防止SQL注入 二、动态SQL 📕概念介绍:随着用户的输入或外部条件的变化而变化的SQL语句,我们称为 动态SQL。 📕案例:用于判断条件是否成立。使用test属性进行条件判断,如果条件为true,则拼接SQL。 用法:test属性为if的判断条件 实现:例如动态sql实现条件查询 select * from emp name like concat('%', #{name}, '%') and gender = #{gender} and entrydate between #{begin} and #{end} order by update_time desc注意: 如果name字段为空,sql语句为select * from emp where and gender = #{gemder}…… 引入标签: where 元素只会在子元素有内容的情况下才插入where子句。而且会自动去除子句的开头的AND 或OR 同理update时也要引入标签去除多余 , 遍历集合或数组给字段赋值 属性介绍 : collection:集合或数组名item:要分割的字段名separator:每次遍历的分隔符open:遍历开始前拼接的片段close:遍历开始后拼接的片段实现:例如实现批量删除 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |