团队里来了一位新成员,问我where 1=1有什么用?为什么要加1=1?

团队里来了一位新成员,问我where 1=1有什么用?为什么要加1=1?感觉这样写多余的。

其实这很好理解,比较常见的有,我们在使用mybatis中时常会遇到if标签判断where后的条件,使用 1=1是为了防止查询字段为空导致sql语句拼接不完整,而导致程序报异常。

为了程序能够正常运行,这时拼凑sql串的时候的一种技巧。在没有更多条件的时候呢,语句也不会报错,否则我们还得判断后面有没有条件,再确定是否带where,比较繁琐。

在MyBatis的mapper文件中,我们可以使用where标签来动态生成where子句,而不必担心第一个条件是否需要加上“and”或“or”。

9fb12e338b18a24eff4802816ec50988.png

如图:我们使用了where标签来包裹动态生成的条件,其中每个条件都使用了if标签来判断是否需要添加到where子句中。这样,我们就可以避免使用where 1=1这种方式,而更加优雅地生成动态的where子句。

那么除了用1=1这种写法除外,有没有其他更优雅的写法呢。答案是有的,我们也可以使用where标签试试。

值得注意的是 where标签只能去除第一个条件中出现的前置 and 关键字,因此,建议在使用where标签时,每个语句都最好写上 and 前缀或者 or 前缀。

另外,除了where标签外,我们还可以采取自定义trim标签。上面使用where标签可以达到拼接条件语句时,自动去掉首个条件的and或or,那么如果是其他自定义的关键字是否也能去掉呢?

这种情况下,where标签就无能为力了,这时候trim标签派上用场了,它也可以实现where标签的功能。

我们将上面基于where标签的写改写为trim标签,我们发现执行效果完全一样,而且trim标签具有了更加灵活的自定义性。推荐使用trim标签。

猜你喜欢

转载自blog.csdn.net/X8i0Bev/article/details/129760905
今日推荐