mybatis ${} 与#{} 拼接字符串区别

2020-05-06  本文已影响0人  John_Phil

MyBatis中使用parameterType向SQL语句传参,parameterType支持的类型可以是基本类型int,String,HashMap和java自定义类型。

在SQL中引用这些参数的时候,可以使用两种方式:

#{parameterName}

${parameterName}

首先,我们说一下这两种引用参数时的区别,使用#{parameterName}引用参数的时候,Mybatis会把这个参数认为是一个字符串,并自动加上'',例如传入参数是“Smith”,那么在下面SQL中:

Select * from emp where name = #{employeeName}

使用的时候就会转换为:

Select * from emp where name = 'Smith'; 

同时使用${parameterName}的时候在下面SQL中

Select * from emp where name = ${employeeName}

就会直接转换为:

Select * from emp where name = Smith

简单说#{}是经过预编译的,是安全的。

而${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。

#{} 这种取值是编译好SQL语句再取值
${} 这种是取值以后再去编译SQL语句
上一篇下一篇

猜你喜欢

热点阅读