• mybatis中xml字段空判断及模糊查询


    由于业务特殊的查询需求,需要下面的这种查询,一直感觉模糊不清,本地测试一下顺便做个总结


    贴一段xml代码,如下:

    1 <if test="receivedName != null and receivedName != '' ">
    2     AND receivedName = #{receivedName}
    3 </if>
    4 <if test="receivedName == null">
    5     AND receivedName is null
    6 </if>

    注意下面几点:

    1、如果java代码中有receiveName这个参数且receiveName="jack",那么这种情况是满足上面第一种情况的,到mybatis中,转换sql语句就是“select * from table where receivedName="jack";”;
    2、如果java代码中有receivedName这个字段且receivedName="",那么这种情况是不满足上面的两个条件的,到mybatis中,转换sql语句就是“select * from table where 1=1;”
    3、如果java代码中没有receivedName这个参数,这里是满足 "receivedName == null" 这种情况的,到mybatis中,转换为sql语句就是“select * from table where receivedName is null;”

    这里要注意,不管你的查询参数有几个,如果你传递的参数中不包含receiveName这个参数,那么,默认的查询sql至少会有一个条件是 “receivedName is null”,因为这个默认的条件,所以今天上午感觉数据查询结果像见鬼了一样,其实也是自己考虑不周全导致。

    再补充一个模糊查询的知识点,平时留意一下。


    对于要模糊查询的字段,我这里有两种处理方法:
    第一种:在组装查询参数的时候,处理,如果参数是存在map中,那么处理方式是map.put("title","%"+dto.getTitle().trim()+"%"),相当于title参数直接带有模糊字符,xml中title LIKE #{title}就行。
    第二种:在组装查询参数时,不做处理,在xml中处理,在xml中有两种写法,分别是下面的两种,经过实验,这两种都是可行的,第二种写法显得比较规范,使用了mysql的函数concat(a,b)。

    (一):

    1 <if test="maiDepartmentName != null">
    2         AND maiDepartmentName LIKE '%' #{maiDepartmentName} '%'
    3 </if>

    (二):

    1 <if test="title != null">
    2     AND  title LIKE CONCAT(CONCAT('%',#{title}),'%')
    3 </if>

    以上内容都是本人在工作的总结,难免会有错误,大家发现欢迎指正!

  • 相关阅读:
    【原创】MessageBox设置默认按钮
    探秘Win7计算器,这货不只是计算器
    android fill_parent和match_parent 的区别
    陈晓旭出家申明
    vi语法高亮
    EXTJS 常用控件的使用
    android平台下使用点九PNG技术
    【Android】附加Android源代码Androidandroid_gingerbread_javasrc
    ComboBox控件隐藏fieldLabel不能隐藏问题解决
    ScriptLoader.loadScripts cannot be called while the ScriptLoader is already loading scripts
  • 原文地址:https://www.cnblogs.com/yangh965/p/6605618.html
Copyright © 2020-2023  润新知