Java面试必问题33:MyBatis里#和{}区别&&MyBatis动态SQL

  1. MyBatis里#和{}区别

在MyBatis中,`#`和`{}`在SQL语句中的使用具有以下区别:

1. 参数替换方式:

   - `#`符号表示使用预编译语句,并将参数值进行占位符替换。

   - `{}`符号表示直接将参数值替换到SQL语句中。

2. 预编译处理:

   - `#`符号在替换时会自动进行预编译处理,可以防止SQL注入攻击,并确保查询参数的类型正确匹配。

   - `{}`符号在替换时不会进行预编译处理,替换后的参数直接拼接到SQL语句中,潜在地存在SQL注入的风险。

3. 适用场景:

   - `#`符号适用于动态SQL值,如动态拼接表名、列名、排序方式等,这些值可能需要进行预处理转义以确保正确形成SQL语句。

   - `{}`符号适用于一些固定的值,如常量、静态参数,这些值不需要进行预处理操作。

最简回答:在MyBatis中,# 用于参数的替换,并会进行预编译处理,以防止SQL注入,而 {} 则直接将参数值替换进SQL语句,性能较好但需注意SQL注入问题。

  1. MyBatis动态SQL

MyBatis 动态 SQL 可以让我们在 XML 映射文件内,以标签的形式编写动态 SQL,完成逻辑判断和动态拼接 SQL 的功能;

MyBatis 提供了 9 种动态 SQL 标签:trim、where、set、foreach、if、choose、when、otherwise、bind;

执行原理:使用 OGNL 从 SQL 参数对象中计算表达式的值,根据表达式的值动态拼接 SQL,以此来完成动态 SQL 的功能。

  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值