栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis 的 ${} #{}的区别是什么

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis 的 ${} #{}的区别是什么

Mybatis 的 ${} #{}的区别是什么

${} 相当于直接拼接SQL,类似于 JDBC 的 Statement 用法,

String sql = "select * from table where xxx = " + xxx + " and yyy = " + yyy;

这种方式缺陷是有被 SQL 注入的风险,并且数据库每次都会重新编译此SQL,因为每次都认为是一个新的 SQL。

==#{} 相当于预编译 SQL,对应 JDBC 的 PreparedStatement,就是 ? ==
占位符形式

String sql = “select * from table where xxx = ? and yyy = ?”;

// 然后每次执行动态传入不同的参数即可这样的好处是不会被 SQL 注入,因为数据库会将所有特殊的字符都当做参数处理,而且多次执行的话数据库也不会重新编译 SQL,因为每次数据库都认为是同一个 SQL,只是替换个参数而已。

综上:能用 #{} 就用 #{}只有在 #{} 不满足的情况下才用 ${}不支持的情况

比如对表名,排序字段,顺序等不支持参数化的部分做动态化的情况。
但要严格注意安全
例如:表名我们只允许他传递我们想要的几种,严格做好参数校验以防止 SQL 注入

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/591976.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号