mybatis中#{}和${}的区别
最新推荐文章于 2026-02-13 23:46:49 发布
原创 于 2023-06-06 17:36:53 发布 · 274 阅读
· 0
· 0 ·
CC 4.0 BY-SA版权
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文介绍了MyBatis中#{}和{}的使用。#{}用于安全设置值,采用Preparement语句,更安全迅速,是首选;" role="presentation">{}的使用。#{}用于安全设置值,采用Preparement语句,更安全迅速,是首选;{}用于直接插入不改变的字符串,但可能导致SQL注入攻击。MyBatis基于JDBC封装,#{}是预编译处理,${}是字符串替换,使用#{}可防SQL注入。

从上文可以看出:
1. 使用#{}格式的语法在mybatis中使用Preparement语句来安全的设置值,执行sql类似下面的:
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1,id);
这样做的好处是:更安全,更迅速,通常也是首选做法。
2. 不过有时你只是想直接在 SQL 语句中插入一个不改变的字符串。比如,像 ORDER BY,你可以这样来使用:
ORDER BY ${columnName}
此时MyBatis 不会修改或转义字符串。
这种方式类似于:
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);
这种方式的缺点是: 以这种方式接受从用户输出的内容并提供给语句中不变的字符串是不安全的,会导致潜在的 SQL 注入攻击,因此要么不允许用户输入这些字段,
要么自行转义并检验。
小结:
Mybatis本身是基于JDBC封装的。
#{para}是预编译处理(PreparedStatement)范畴的。
${para}是字符串替换。
Mybatis在处理#时,会调用PreparedStatement的set系列方法来赋值;处理时,就是把{para}替换成变量的值。
使用#{para}可以有效的防止SQL注入,提高系统安全性。
相关知识
mybatis中#{}和${}的区别
MYBATIS中if test判断中的注意事项
【MyBatis】标签的条件判断(Boolean类型参数)
JDBC与MyBatis:数据库访问技术的变迁【后端 15】
mybatis学习教程——@Param注解使用
MyBatis @Options使用方法
手把手教你如何玩转插件:通用Mapper和Mybatis generator
MyBatis mapper.xml根据时间筛选sql
mybatis存储过程及mode=IN,mode=OUT的使用
Python中is和==的区别详解
网址: mybatis中#{}和${}的区别 https://m.huajiangbk.com/newsview2561994.html