Mapper.xml 中 # 和 $ 的 区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mapper.xml 中 # 和 $ 的 区别相关的知识,希望对你有一定的参考价值。

参考技术A 简单说

在实际中我们尽可能使用前者而并非后者, 因为前者会对你插入的字符串做个简单的转换,能在一定程度上防止 SQL 注入。
举个例子

假设我们前端没有做验证

而有人选择传入参数 'Draper' OR 1=1 那么整体的 SQL 语句就会变成

那么无论有没有 Draper 他都会检索多条记录。

所以在实际中尽可能选择 #,除非迫不得已

MyBatis Mapper.xml文件中 $和#的区别

1.优先使用#{paramName,jdbcType=VARCHAR} 写法,除了可以防止sql注入以外,它还能在参数里含有单引号的时候自动转义,

而${paramName}由于是类似于拼接sql的写法,不具备此功能。

2.注意,使用 #{paramName,jdbcType=VARCHAR} 写法的时候,模糊查询的写法为:‘%‘||#{paramName,jdbcType=VARCHAR}||‘%‘

以上是关于Mapper.xml 中 # 和 $ 的 区别的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis Mapper.xml文件中 $和#的区别

MyBatis Mapper.xml文件中 $和#的区别

Mybatis框架中Mapper动态代理方式

@Mapper和@Repository的区别

Mybatis的mapper.xml文件详解

mybatis mapper xml文件配置resultmap时,id行和result行有什么区别?