开发者社区> 问答> 正文

在Mybatis中 #{} 和 ${} 的区别是什么?

在Mybatis中 #{} 和 ${} 的区别是什么?

展开
收起
真的很搞笑 2021-10-20 23:12:01 467 0
1 条回答
写回答
取消 提交回答
  • 动态sql是mybatis的强大特性之一也是这个框架优于其他框架的一个原因,mybatis在对sql进行预编译之前会对sql语句进行动态解析,#{}和${} 则会有不同的表现:

    1.#{}在动态解析的时候回解析成 一个参数的标记符,会将sql中的#{}解析替换成一个?,最后注入的值是带引号的,例如:

    解析前:select * from user where name = #{name} 解析后:select * from user where name = '姓名' 1 2 2.#{}是字符串替换,mybatis在处理${}时就是把它替换成变量的值,例如:

    解析前:select * from user where name = ${name} 解析后:select * from user where name = 姓名 1 2 3.#{}防止sql注入:

    #方式能够很大程度的防止sql注入。而$无法防止sql注入,所以在使用的时候用的比较多的是#{}来传参数

    至于#能够防止sql注入是因为mybatis中的sql语句是预编译机制,预编译是提前对sql语句进行编译,而编译后传入的参数将不会再执行编译,一般的sql注入都是在编译的过程中被恶意注入了某些特殊字符,而预编译机制则可以很好的防止sql注入。

    2021-10-20 23:12:37
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Java Spring Boot开发实战系列课程【第6讲】:Spring Boot 2.0实战MyBatis与优化(Java面试题) 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载