- MyBatis里#和{}区别
在MyBatis中,`#`和`{}`在SQL语句中的使用具有以下区别:
1. 参数替换方式:
- `#`符号表示使用预编译语句,并将参数值进行占位符替换。
- `{}`符号表示直接将参数值替换到SQL语句中。
2. 预编译处理:
- `#`符号在替换时会自动进行预编译处理,可以防止SQL注入攻击,并确保查询参数的类型正确匹配。
- `{}`符号在替换时不会进行预编译处理,替换后的参数直接拼接到SQL语句中,潜在地存在SQL注入的风险。
3. 适用场景:
- `#`符号适用于动态SQL值,如动态拼接表名、列名、排序方式等,这些值可能需要进行预处理转义以确保正确形成SQL语句。
- `{}`符号适用于一些固定的值,如常量、静态参数,这些值不需要进行预处理操作。
最简回答:在MyBatis中,# 用于参数的替换,并会进行预编译处理,以防止SQL注入,而 {} 则直接将参数值替换进SQL语句,性能较好但需注意SQL注入问题。
- MyBatis动态SQL
MyBatis 动态 SQL 可以让我们在 XML 映射文件内,以标签的形式编写动态 SQL,完成逻辑判断和动态拼接 SQL 的功能;
MyBatis 提供了 9 种动态 SQL 标签:trim、where、set、foreach、if、choose、when、otherwise、bind;
执行原理:使用 OGNL 从 SQL 参数对象中计算表达式的值,根据表达式的值动态拼接 SQL,以此来完成动态 SQL 的功能。