Mybatis #{}和${}
Posted 364.99°
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis #{}和${}相关的知识,希望对你有一定的参考价值。
大多数情况下,都是使用#
1.$和#
#
占位符,可以有效地防止SQL注入
- 传参大部分使用
#
,底层使用的是PreparedStatement
对象,是安全的数据库访问,能有效防止SQL注入 - 当
parameterType
即传入参数的类型是八种基本类型的时候
#
中的内容书写没有限制
使用?
<select id="getOneById" parameterType="_int" resultType="string">
select name
from student
where id=#zhang/*这里面的内容可以随便写,不写都可以*/
</select>
- 当
parameterType
即传入参数的类型是实体类的类型时
#
中的内容必须是类中成员变量的名称,要区分大小写
<insert id="insert" parameterType="student">
insert into student (name,email,age)
values (#name,#email,#age)/*这三个参数都是实体类的属性*/
</insert>
$
字符串拼接
- 一般用于模糊查询(
like
)中,但是有SQL注入的风险 - 当
parameterType
即传入参数的类型是八种基本类型的时候
3.5.1及以下的版本,$
只能写value
3.5.1以上的版本,$
随便写
<select id="getByName" parameterType="string" resultType="student">
select id,name,email,age
from student
where name like '%$name%'/*随便写*/
</select>
- 当
parameterType
即传入参数的类型是实体类的类型时
$
中的内容必须是类中成员变量的名称,要区分大小写
$
字符串替换
2.优化模糊查询,防SQL注入
Mapper接口中定义方法
List<Users> getByName(String name);
映射文件中
<!--
优化模糊查询
#中的内容写法还是那样
-->
<select id="getByName" parameterType="string" resultType="student">
select id,name,email,age
from student
where name like concat('%',#name,'%')
</select>
3.$字符串替换
$
字符串替换 —— $
少有的优势(灬ꈍ ꈍ灬)
Mapper接口中定义方法
List<Users> getByNameOrAge(
@Param("columnName")//这里面可以随便写,但是要求与参数名相同
String columnName
@Param("columnValue")
String columnValue);
当传入参数多于1个的时候省略parameterType
属性
<select id="getByName" resultType="student">
select id,name,email,age
from student
where $columnName like concat('%',#columnValue,'%')
</select>
这样可以减少重复的代码
创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖以上是关于Mybatis #{}和${}的主要内容,如果未能解决你的问题,请参考以下文章