zoukankan      html  css  js  c++  java
  • 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后的模糊条件 必须是字符串

  • 相关阅读:
    echarts中label上下两行展示
    vue中去掉地址栏中的#
    vue中登录超时跳转到登录页面设置拦截器
    在table中,tbody没有充满整个table
    vant中dialog的使用
    水位波纹动画兼容ie8
    在vue中使用XLSX导出表格
    elementUI 选择开始结束日期加限制
    element table 合并同类项并输出后台返回数据
    将后台返回的月份201810,201809转换成正常的9月10月
  • 原文地址:https://www.cnblogs.com/xfk1999/p/mysql-ambiguous-query.html
Copyright © 2011-2022 走看看