Mybatis中使用choose/when语句采坑记

  项目中写查询语句的时候,时常会使用到Mybatis中的choose/when语句,根据不同的条件执行不同的分支。

最近在使用这个语句的时候,出现问题导致这个语句不能正确执行,排查很久才解决这个问题,因此写此篇博文

用于记录这个问题。问题如下,传入的参数为字符串1,写的查询SQL语句如下,

 

 

 打印的参数和SQL语句如下,

 

 

从执行的SQL语句来看,有where查询条件,这说明参数不等于null并且不等于空;

从条件t.id >4的结果来看,没有匹配上传入参数等于字符串1的情况。为什么会出现这种情况呢?

自己百思不得其解。

 

经过多次测试之后,还是同样的问题。于是自己就想着换种方式,临时将数字1修改为字符串ss,再次测试,

发现正常,能够正确地进入这个分支。这就让人感觉奇怪了,到底是什么原因导致的呢?

 

 然后使用搜索引擎查找相关的答案,发现是因为字符串1mybatis中被解析成了数字1,才导致这个问题。

解决办法为添加一个toString()方法即可,如下

 

再次测试结果如下,

 传入字符串串1

 

  传入字符串串2

 

 传入字符串串3

 

 到此问题解决。参考博文.

https://blog.csdn.net/gzg_123/article/details/125450547

posted @ 2023-03-10 20:28  一只爱阅读的程序员  阅读(456)  评论(0编辑  收藏  举报