ToB企服应用市场:ToB评测及商务社交产业平台

标题: MyBatis中#和$的区别 [打印本页]

作者: 汕尾海湾    时间: 2023-9-24 18:02
标题: MyBatis中#和$的区别
MyBatis中#{}和${}的用法

说一下为什么要写这篇文章,最近面试有被问到,一下子想不出来有啥区别,想记录一下加深自己的理解,同时自己也经常用MyBatis-Plus忽略了XML文件的编写和使用,所以需要加深一下这块的知识
一、例子

1、#{}将传入的数据当作一个字符串,会对传入的数据加上一个双引号。
比如
  1. select * from student where student_name = #{studentName}
复制代码
如果传入的值为zhangxiangwei,那么经过Mybatis解析完成之后的语句是
  1. select * from student where student_name="zhangxiangwei"
复制代码
2.${}将传入的数据直接显示生成在sql中。
比如
  1. select ${fieldName} from user where user_age = 22
复制代码
此时,传入的参数作为要查询的字段,如果传入的值为user_name,则解析成的sql为:
  1. select user_name from user where user_age = 22
复制代码
二、区别

1.#{}方式能够很大程度上防止sql注入,${}无法防止sql注入。
2.${}方式一般用于传入数据库对象,例如列表和表名,#{}方式一般用来传递接口传输过来的具体数据。
3.由于#{}方式具有更高的安全行,所以能用#{}的地方尽量不要使用${}。
4.Mybatis排序时使用order by动态参数时需要注意,用${}而不是#{}。
5.#符号(Pound Sign)
6.$符号(Dollar Sign)
三、最后说一下 $ 动态 拼接SQL

下面是一个实例
  1. <select id="getUsersWithDynamicSorting" parameterType="map" resultType="User">
  2.   SELECT * FROM users
  3.   WHERE 1=1
  4.   
  5.   <if test="sortField != null and sortOrder != null">
  6.     ORDER BY ${sortField} ${sortOrder}
  7.   </if>
  8. </select>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4