首页 > 数据库技术 > 详细

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

时间:2020-08-09 18:30:36      阅读:101      评论:0      收藏:0      [点我收藏+]

问题

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后的模糊条件 必须是字符串

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

原文:https://www.cnblogs.com/xfk1999/p/mysql-ambiguous-query.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!