MyBatis ${}和#{}区别

sql防注入 底层 jdbc类型转换 当简单类型参数
$ 不防止 Statment 不转换 value
# 防止 preparedStatement 转换 任意

除模糊匹配外,杜绝使用${}

MyBatis教程,大家可以借鉴     MyBatis 教程_w3cschool

主要区别

1、#{} 是预编译处理,${} 是直接替换

2、${} 存在SQL注入的问题,而 #{} 不存在;

#{} 是预编译处理,像传进来的数据会加个" "(#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号)

${} 就是字符串替换。直接替换掉占位符。$方式一般用于传入数据库对象,例如传入表名.

使用 ${} 的话会导致 sql 注入。什么是 SQL 注入呢?

比如 select * from user where id = ${value}        value 是一个数值。

如果对方传过来的是 001  and name = tom。这样就相当于多加了一个条件,把SQL语句直接写进来了。如果是攻击性的语句,则会导致数据库损坏。

所以为了防止 SQL 注入,能用 #{} 的不要去用 ${}。如果非要用 ${} 的话,那要注意防止 SQL 注入问题,可以手动判定传入的变量,进行过滤,一般 SQL 注入会输入很长的一条 SQL 语句。

like模糊查询

${} 进行模糊查询(存在 SQL 注入问题)
方式一:直接替换 
<select id="getUserById" resultType="com.by.pojo.User">
    select * from user where username like '%${key}%'
</select>
 
 
方式二:使用concat进行字符串拼接
<select id="getUserById" resultType="com.by.pojo.User">
    select * from user where username like concat('%', '${key}', '%')
</select>
#{} 模糊查询
<select id="getUserById" resultType="com.by.pojo.User">    
    select * from user where username like concat('%', #{key}, '%')
</select>
使用 #{} 传入的参数会自带引号
<select id="getUserById" resultType="com.by.pojo.User">    
    select * from user where username like concat('%', #{key}, '%')
</select>


目标sql 语句:select * from user where username = '%张%';

实际sql语句:select * from user where username = '%' 张 '%';

相关推荐

  1. MyBatis ${}#{}区别

    2023-12-20 09:22:02       37 阅读
  2. mybatismybatis-plus的区别

    2023-12-20 09:22:02       15 阅读
  3. Mybatis中的${}#{}区别

    2023-12-20 09:22:02       23 阅读
  4. mybatis - 取值符号:# $的区别

    2023-12-20 09:22:02       16 阅读
  5. mybatis 中 #{} ${}的区别是什么?

    2023-12-20 09:22:02       13 阅读
  6. mybatis中$#的区别以及各自的使用场景

    2023-12-20 09:22:02       19 阅读
  7. MybatisHibernate的作用区别及底层原理分析

    2023-12-20 09:22:02       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-20 09:22:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-20 09:22:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-20 09:22:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-20 09:22:02       20 阅读

热门阅读

  1. ax650使用ax-pipeline进行推理

    2023-12-20 09:22:02       39 阅读
  2. Flink-状态后端

    2023-12-20 09:22:02       37 阅读
  3. 【P2PTransportChannel 】connetion 切换1

    2023-12-20 09:22:02       28 阅读
  4. c# 移除数据中 Deleted 为1的数据

    2023-12-20 09:22:02       39 阅读
  5. mysql_binlog格式分析,快速了解binlog日志格式

    2023-12-20 09:22:02       33 阅读
  6. MYSQL-简单的联表查询示例

    2023-12-20 09:22:02       29 阅读
  7. Tomcat

    2023-12-20 09:22:02       39 阅读
  8. 2312llvm,02前端

    2023-12-20 09:22:02       38 阅读
  9. SpringMVC---获取参数

    2023-12-20 09:22:02       38 阅读
  10. 51单片机基于时间片轮转的简单rtos

    2023-12-20 09:22:02       36 阅读