mybatis中#{}和${}区别

mybatis 传值常用的两种方式:#{}、${}

 方式一:#{}

 一般常用,主要用来防止sql注入。

eg: select * from user where userName = #{userName}

该方式在解析例子中的sql时,会先进行预编译--》select * from user where userName = ?

然后将变量中的值传递 eg : select * from user where userName = "zhangsan"。此时才将需要传递的值 赋值给变量。

从而能够有效的防止sql注入。

但是如果对user表中的某个字段进行排序 

eg: select * from user order by #{createTime} 此时 经过预编译后的sql如下

select * from user order by "createTime"---->所以查出的结果是无效的。

所以上面的写法需要更正 eg: select * from user order by ${createTime}

方式二:${}

该方式不能防止sql注入。一般用来传递数据库对象如表名。

${}是先将值传入后再预编译

eg:select * from user order by ${createTime}--->select * from user order by createTime

所以mybatis在进行传值的时候,需要特别注意。通常情况下都是以#{}方式来传值。

 

初次开始写博客,如有不对之处请指出来。谢谢!

posted on 2018-09-04 18:13  mylovezy  阅读(221)  评论(0)    收藏  举报