mybatis 使用in 查询时报错_通过拦截器Interceptor优化Mybatis的in查询

在工作中,我们经常会因为在mybatis中的不严谨写法,导致查询语句会产生in()的情况。这种情况不符合SQL的语法,导致程序报错。

网上有一些解决方案,大部分的解决方案都是对list判null和判空来处理。

do something

但是这种解决方法会产生一个逻辑问题,本来in一个空列表,查询结果应该是没有数据才对,现在却变成了这个in条件失效,这就导致了结果有可能并不是我们想要的。

还有一种解决方案是对list做双重判断。第一重判断和上面的解决方案一致,增加的第二重判断是为了保证如果list为空列表则只能查到空列表

do something

and 1=0

这种方案能解决in()的问题报错的问题,也不会产生逻辑错误的情况。但是这个写法有点繁琐,每次遇到这种情况都需要特殊判断。

于是我就准备通过拦截器Interceptor来解决这个问题。

在理想状态下,我们在xml中应该只应该判断list非null就可以了。

以下是我写的EmptyCollectionIntercept

@Intercepts({

@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}),

@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class,RowBounds.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值