欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

个人主页有联系方式,不足之处,欢迎指出。