码迷,mamicode.com
首页 > 其他好文 > 详细

mybatis中#{}和${}的区别

时间:2018-08-08 23:18:30      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:包含   必须   语句   项目   支持   sql   简单的   rom   pre   

动态sql是mybatis的主要特性之一,我们的惯用做法是将mapper中收集来的参数传递到xml中,组装成动态的sql语句

去执行,mybatis支持两种参数替换的语法:${}和#{},下面简单介绍下两者的区别

1、在解析时:

  ${}是一个简单的String替换

  #{}会解析为一个prepared statement,对的,学习过原生jdbc的同学一定再熟悉不过这个叫法了:预处理语句

也就是类似select * from user where name = ?;  预处理的好处?写过视图的应该知道,视图就好比一条预处理的sql

执行的时候效率当然更高一些

2、防sql注入

  ${}既然是String原原本本的替换,那么如果我找漏洞,可否将传入的值后面加一个类似于可执行的sql语句?

比如传入id值,我可以这样传入:"id=1;delete from user",最后拼接起来的语句变为

"select * from user where id=1;delete from user"

user表被删了,当然这是个简单的例子,仅仅用来说明问题

  #{}则不会出现这样的问题

因此在传入的值中包含表名的时候,必须使用#{},其实在项目中${}早已被丢弃、、、

 

mybatis中#{}和${}的区别

标签:包含   必须   语句   项目   支持   sql   简单的   rom   pre   

原文地址:https://www.cnblogs.com/yb38156/p/9446296.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!