Mybatis中#和$的区别

tips:
能用#的就别用$.
Mybatis中进行参数传递,可以使用两种方式#{}或者${}
其中,#{ } 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符;一个 #{ } 被解析为一个参数占位符 ?
而,${ } 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换
${ } 的变量的替换阶段是在动态 SQL 解析阶段,而 #{ }的变量的替换是在 DBMS 中。
简单理解
用#{} 这种取值是编译好SQL语句再取值
而${} 这种是取值以后再去编译SQL语句
所以,#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:
order by #{id},如果传入的值是111,那么解析成sql时的值为order by '111'
$将传入的数据直接显示生成在sql中。如:order by ${id},如果传入的值是111,
那么解析成sql时的值为order by 111
因此,#方式能够很大程度防止sql注入。
$方式无法防止Sql注入。
$方式一般用于传入数据库对象,例如传入表名.
以及MyBatis排序时使用order by 动态参数时,用$而不是#;
避免用#导致多了''

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,694评论 0 4
  • 动态 SQL 是 mybatis 的强大特性之一,也是它优于其他 ORM 框架的一个重要原因。mybatis 在对...
    CoderZS阅读 3,478评论 0 7
  • MyBatis中使用parameterType向SQL语句传参,parameterType后的类型可以是基本类型i...
    愤怒的_菜鸟阅读 6,003评论 0 9
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,780评论 18 399
  • 如果悲观是一种病,那么它一定是一种传染病。它让一个人沮丧,然后让另一个人绝望。然后它又瞄准了我,把满满的恶意压...
    125e2843543e阅读 526评论 0 0