zoukankan      html  css  js  c++  java
  • 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>

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

  • 相关阅读:
    UPC-5930 Rest Stops(水题)
    UPC-6199 LCYZ的道路(贪心)
    UPC-6198 JL的智力大冲浪(简单贪心)
    POJ 3279 Filptile dfs
    hrbust 1621 迷宫问题II 广搜
    HDU 1045 dfs + 回溯
    优先队列基本用法
    树。森林。和二叉树之间的转换
    POJ 2689 筛法求素数
    哈理工OJ 1328
  • 原文地址:https://www.cnblogs.com/yangh965/p/6605618.html
Copyright © 2011-2022 走看看