关于MyBatis 中使用 where 1=1的替代方法

        在过往开发工作中,很多人应该碰到过在mybatis的SQL语句中使用where 1=1这个写法,或用过这个写法,这个写法一般在某条语句的where之后没有直接成立条件,而是需要用<if>来直接衔接语句,如果where后面直接拼接<if>,就会出现一种情况,如下图:

如type成立,则会进入拼接,拼接结果则是where deptid = #{deptid},如type或其他if条件都不成立,则会出现wher后为空,直接拼接order by,这种情况下就会报MyBatis 或sql异常。那么要是在where后拼接一个1=1呢,即不会报错,但是这个1=1会在查询过程中造成查询效率问题。所以我们应该尽量避免使用1=1这种无用条件。我们怎么解决这个问题呢?接着往下看。

   在 MyBatis 中早已经想到了这个问题,我们可以将 SQL 中的 where 关键字换成 MyBatis 中的标签,并且给每个标签内都加上 and 拼接符,这样问题就解决了。下面我们看看优化后的代码:

这样,所有if条件不管成不成立,拼接都会正常,where标签会判断,如果没有任何参数,则不会在 SQL 语句中拼接 where 查询,反之才会拼接 where 查询;在查询的标签中,每个标签都可以加 and 关键字,MyBatis 会自动将第一个条件前面的 and 关键字删除掉,从而不会导致 SQL 语法错误,这一点官方文档中也有说明。在 MyBatis 中,建议尽量避免使用无意义的 SQL 拼接  where 1=1,我们可以使用标签来替代 where 1=1,这样的写既简洁又优雅,这个就是mybatis标签的妙用之处啦

  • 13
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值