在Mybatis中#{}和${}

动态 sql 是 MyBatis 的主要特性之一,在 mapper 中定义的参数传到 xml 中之后,在查询之前 MyBatis 会对其进行动态解析。MyBatis 为我们提供了两种支持动态 sql 的语法:#{} 以及 ${}。

#{}和${}有什么区别?
#{}:

#{}是预编译处理,实现的是sql语句的预处理参数,Mybatis在处理#{}时,会将sql中的#{}替换为 ? 号,调用PreparedStatement的set方法赋值;使用时不需要关注数据类型,Mybatis自动实现数据类型的转换,并且可以防止SQL注入,提高系统的安全性;

#{}中表示输入的参数名称,如果输入参数是简单类型,那么#{}中的参数可以任意

@Select("SELECT * FROM student WHERE username = #{username} AND PASSWORD = #{password}")

Mabatis中模糊查询防止sql注入

@Select("<script>SELECT * FROM student" +
"<where>" +
"<if test=\"username!=null and username!=''\">" +
"and username like #{username}</if>" +
"</where></script>")

${}:

${}是字符串替换,${}将传入的数据直接显示生成在sql中。
${}实现的是sql语句的直接拼接,不做数据类型转换,需要自行判断数据类型;
${}存在sql注入的风险,但是在特殊场景下必须使用${},比如order by 语句后面要跟动态列,
查询条件是固定的,此时只能使用${}方式进行字符串拼接
${value}:${}中value表示输入的参数名称,如果输入的参数是简单
类型,那么${}中的值只能是value。
Mybatis在处理${}时,就会把${}替换成变量的值。
如果使用${},而传入的是字符串,就必须这样写:'${}',
不然会报 Unknown column 'TT' in 'where clause' 的错误

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

在Mybatis中#{}和${}

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » 在Mybatis中#{}和${}
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏