记录最近遇到的一个小麻烦~~
1、背景
我这次的需求是实现用户在搜索框输入关键字进行模糊查询。其实挺简单的,就是在原来别人的XML代码上做一点修改,也就是查询的SQL语句做点改动,就是增加三个字段的模糊匹配。
在改完了之后进行自测,有两个字段实现了模糊查询的效果,然而第三个字段死活匹配不到。这把我整迷糊了,我左看右看写的代码都没有问题,要是有问题的话另外两个字段就不应该匹配得上,那么我想问题应该在别的地方。
2、发现问题
我看代码、数据都没问题后,就到处看。于是在我改的SQL语句往下滑(那段语句太长,一屏显示不完),真让我发现了点东西。原来在下面有段查询的SQL。这是段MyBatis中pagehelper插件的自定义COUNT方法,在我那段SQL执行完后会自动执行这段自定义COUNT语句。
而且自定义COUNT的查询条件里模糊匹配的字段正好有我自测时能匹配出来的那两个字段,我觉得问题就出在这里。
3、解决办法
把自定义COUNT方法里的模糊匹配和我上面那段SQL修改的一致,就好了。
4、Pagehelper插件自定义COUNT用法
其实如果没有自定义COUNT方法,那么这个分页插件会自动在你要执行的SQL语句外面套一层,于是得到:SELECT COUNT(*) FROM (你的sql) table_count。
如果你不想用它自动帮你套用的COUNT方法,你可以选择自己定义COUNT方法。(注意,2017-08-01版后才支持这个操作)
具体用法如下:
1、把原来的SQL语句copy一份
2、在原来id的结尾加上_COUNT
3、将SELECT 查询的字段名换成COUNT(0)
4、resultType那里改成java.lang.Long
5、其他地方不用动,与原来的SQL语句保持一致就行
【注意】如果原来的SQL中查询条件有了删改,那么自定义COUNT方法中的查询条件也要跟着保持一致,否则查询出来的结果可能还是原来条件下的结果。
最后贴上一个链接如何使用分页插件 如何使用分页插件https://pagehelper.github.io/docs/howtouse/