mybatis利用动态SQL进行模糊查询遇到的问题


问题

mybatis利用动态SQL进行模糊查询, 但查询的结果始终是0行, 经过分析发现了问题所在

场景

我使用的是mybatis-plus



图组1 表结构及索引

图2 userMapper接口

key是模糊查询的字段如username, phone, email
value是模糊值, 如sss, 然后使用动态SQL组合成%sss%


图3 错误的SQL语句

其中<bind>是为了拼接模糊查询的条件, 为了防止SQL注入不能使用%${}%的写法, 查询


图4 始终没有查询到结果

解决

先开启控制台打印mybatis执行的SQL语句


图5 mybatis-plus开启执行SQL的日志

mybatis-plus即配置log-impl即可log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mybatis原生可自行搜索mybatis 显示执行的SQL语句

运行, 分析控制台输出结果


图6 控制台输出结果

整体来说SQL没有写错, 模糊查询的%也连接正常

经过仔细发现username字段是一个字符串类型, 而平常写SQL条件查找好像从来没写过字符串, 我用navicat做了一下实验


图7 username条件为字符串时

图8 username条件不是字符串时

到这里我才明白了, 条件的字段不能写成字符串, 因为以前没遇到过这样的问题

修改mapper, 先用动态SQL的if判断字符串


图9 修改后的mapper

重启一下服务, 再进行查询


图10 效果

可以正常运行并能正确返回匹配模糊条件的结果

总结

用SQL进行模糊查询, 需要注意


图11 注意

where后的字段必须 不能是字符串
like后的模糊条件 必须是字符串


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM