Mybatis中#{}与${}的区别
程序员文章站
2022-04-22 10:33:50
...
#{} 与 ${}
-
#{} 方式能够很大程度防止sql注入
-
${} 方式无法防止Sql注入
这个大家应该都知道,我来说说我实际项目中遇到的问题。
背景介绍
数据展示中需要做动态排序,那么就无法避免要自己去动态的拼接 sql,根据条件的不同组合成不同的 sql。此前虽然很清楚的知道 #{} 与 ${} 的区别,但是从来都只用 #{}(尽量用这个),因此导致花费了大量时间寻找问题的所在。
栗子
#{} 传入,sql语句解析是会加上"",下面第一个栗子的用法是没有问题的
String name = "张三";
select * from user where name = #{name}
// 解析后的 sql
select * from user where name = '张三'
但是,如果是时间排序的话就会出现问题
// DESC 降序排序
String order = "DESC";
order by date #{order}
// sql 就会变成这样,然后就出错了
order by date 'DESC'
这种场景下,我们就需要使用 ${}
// DESC 降序排序
String order = "DESC";
order by date ${order}
// sql 语句接下后变成这样,和我们预期效果一样,没有问题
order by date DESC
个人主页有联系方式,不足之处,欢迎指出。
上一篇: Mybatis中#{}与${}的区别
下一篇: mybatisplus的使用