标签:function 内容 res line idt net result tin font
一、总结:
#{ }:占位符,防止sql注入
${ }:sql拼接符号
二、分析:
动态sql是mybatis的强大的特性之一。mybatis在对sql语句进行预编译之前会对sql进行动态解析,解析为一个BoundSql对象,也是在此处对动态SQL进行处理。
在动态SQL解析中,#{ }和${ }不同:
#{ }解析为JDBC预编译语句(PreparedStatement)的参数标记符
例如:
三、使用
1、能使用#{ } 不使用${ }
2、$方式一般用于传入数据库对象,例如传入表名
3、排序时使用order by 动态参数时需要注意,用$而不是#
MyBatis排序时使用order by 动态参数时需要注意,用$而不是#
字符串替换
默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用:
ORDER BY ${columnName}
这里MyBatis不会修改或转义字符串。
重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。
mybatis本身的说明:
1. 使用#{}格式的语法在mybatis中使用Preparement语句来安全的设置值,执行sql类似下面的:
这样做的好处是:更安全,更迅速,通常也是首选做法。
2. 不过有时你只是想直接在 SQL 语句中插入一个不改变的字符串。比如,像 ORDER BY,你可以这样来使用:
此时MyBatis 不会修改或转义字符串。
这种方式类似于:
标签:function 内容 res line idt net result tin font
原文地址:https://www.cnblogs.com/zxf160/p/9494817.html