#{} 表示一个占位符号,通过 #{} 可以实现 preparedStatement 向占位符中设置值,自动进行 java 类型和 jdbc 类型转换。#{} 可以有效防止   sql注入。 #{} 可以接收简单类型值或 pojo 属性值。 如果 parameterType 传输单个简单类型值,#{} 括号中可以是 value 或其它名称。

${} 表示拼接sql串,通过 ${} 可以将 parameterType 传入的内容拼接在 sql 中且不进行 jdbc 类型转换,不能防止 sql 注入问题, ${} 可以接收简单类型值或 pojo 属性值,如果 parameterType 传输单个简单类型值,${} 括号中只能是 value。

下面举个例子来说明这两个的区别:

代码上来先:

<!-- 通过ID查询一个用户 -->
<select id="findUserById" parameterType="Integer" resultType="com.msym.beans.User">
select * from user where id = #{v}
</select> <!-- //根据用户名称模糊查询用户列表
#{} select * from user where id = ? 占位符 ? == '五'
${} select * from user where username like '%五%' 字符串拼接 -->
<select id="findUserByUsername1" parameterType="String" resultType="com.msym.beans.User">
select * from user where username like '%${value}%'
</select>
<select id="findUserByUsername2" parameterType="String" resultType="com.msym.beans.User">
select * from user where username like "%"#{v}"%"
</select>

上面是 user 类对应的 user.xml 文件,用于编写 sql 语句,避免了硬编码。

id 为 findUserByUsername1 的采用的是 ${} 占位符,id 为findUserByUsername2 采用的是 #{} 占位符,

前者生成的 sql 为 select * from user where username like ‘%XXX%’;

后者生成的 sql 语句是 select * from user where username like "%"'XXX'"%",(这样的格式我还没在 sql 中写过,但是的确能 run)

(XXX 是调用该查询是传入的参数)注意这两者的不同,前者不能防止 sql 注入,后者能防止。

最新文章

  1. Android教程收集贴
  2. Python 之Ajax
  3. ios5 中文键盘高度变高覆盖现有ui问题的解决方案(获取键盘高度的方法)(转载)
  4. 【实习记】2014-09-24万事达卡bin查询项目总结
  5. jquery学习之旅
  6. osgi实战学习之路:8. Service-3之ServiceTracker
  7. God 1.1.1 多线程之内存可见性
  8. 20180117MySQL出现Waiting for table metadata lock的原因以及解决方法
  9. 杭电ACM 1003题
  10. 机器学习 - 损失计算-softmax_cross_entropy_with_logits
  11. 学习笔记------------解决margin塌陷
  12. How to fix the bug “Expected &quot;required&quot;, &quot;optional&quot;, or &quot;repeated&quot;.”?
  13. python测试开发django-14.查询表结果(超详细)
  14. jpgraph中文使用手册之文本和字体控制教程
  15. 题解 P3870 【[TJOI2009]开关】
  16. LeetCode 1. Two Sum (JavaScript)
  17. ie8下a标签中的图片出现边框
  18. Mysql root密码忘记的解决办法
  19. php特级课---3、常用的网站加速技术有哪些
  20. HDU 2108 Shape of HDU (判断是不是凸多边形 叉乘)

热门文章

  1. 有限差分法解矩形波导内场值、截止频率 MATLAB
  2. tarjan 强连通分量
  3. style.attr,currentStyle,getComputedStyle获取元素css
  4. 20155302 2016-2017-2 《Java程序设计》第十周学习总结
  5. BZOJ4034_树上操作_KEY
  6. springboot 中根据数据库表生成所有表的model,mapper和xml文件
  7. 2017&quot;百度之星&quot;程序设计大赛 - 初赛(A) 小C的倍数问题
  8. 查询表的大小(mysql)
  9. TensorFlow深度学习实战---图像数据处理
  10. Python不生成HTMLTestRunner报告-转载学习