Mybatis学习小结(三)动态SQL

动态 SQL 是 MyBatis 的强大特性之一。如果使用过 JDBC 或其它类似的框架,应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦
使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性。说直白一点动态SQL就是指根据不同的条件生成不同的SQL语句本质上还是SQL语句,只是我们可以在SQL层面上去执行一个逻辑代码。
首先要说的是if标签:
If标签是使用动态 SQL 最常见情景是根据条件包含 where 子句的一部分,也是使用动态SQL最常用的一部分,主要作用是提供了可选的查找文本功能,其使用方式如下:
在这里插入图片描述

在不传入bookID参数时就只会返回所有bookName参数等于指定值的内容,只有传入bookID参数才会标签中的语句拼接上去。
有时候如果在不知道传入的参数是否会符合条件时,直接使用if标签如果没有匹配的条件会出现这样的情况:

SELECT * FROM books
WHERE

这会导致查询失败,如果在有多个if标签的情况下匹配的只是第二个条件又会出现以下的情况:

SELECT * FROM books
WHERE
AND bookName like ‘参数’

这个查询也会失败。这个问题不能简单地用条件元素来解决 所以需要用到另一个标签where,where 标签只会在子标签返回任何内容的情况下才插入 “WHERE” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 标签也会将它们去除,使用方式如下:
在这里插入图片描述

这样组合使用即使传入的参数不符合条件也不会出现上面的情况。
除了上述两种标签还可以使用Set标签,Set标签的使用方式如下:
在这里插入图片描述

它的主特性是:Set标签 用于动态包含需要更新的列,忽略其它不更新的列。
Set标签 会动态地在行首插入 SET 关键字,并会删掉额外的逗号
如果上面的where标签和Set标签的不符合使用的需求可以通过自定义 trim 标签来定制 where 标签的功能
< trim prefix=“WHERE” prefixOverrides="AND |OR ">

< /trim>
< trim prefix=“SET” suffixOverrides=",">

< /trim>
上述的代码就分别等价于where标签和Set标签,通过设置前后缀以及需要忽略的内容来使用。如where标签就是设置了前缀为where 前缀需要忽略的内容我AND或OR。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值