1.区别

<if test='studentName!=null'>

前端传入json

{  "studentName":"程" , "teamName":""  }

后端对应为

Map{  "studentName":"程" , "teamName":""  }

前端传入json

{  "studentName":"程"  }

后端对应为

Map{  "studentName":"程" , "teamName":null  }

"teamName":""时,test='studentName!=null'为true

"teamName":null时,test='studentName!=null'为false

2.项目源码

//KbsStudentDao//搜索学员(按组名和学员姓名模糊查询,参数可为空)
@Select("<script>"+ "select distinct SYS_USER.USERID as studentID,SYS_USER.USER_NAME as studentName from SYS_USER"+ " LEFT JOIN SYS_USER_ROLE on SYS_USER.USERID=SYS_USER_ROLE.USERID"+ " RIGHT JOIN KBS_TEAM_USER on SYS_USER.USERID=KBS_TEAM_USER.USER_ID"+ " RIGHT JOIN KBS_TEAM on KBS_TEAM.TEAM_ID=KBS_TEAM_USER.TEAM_ID"+ " where ROLEID='ROLE_STUDENT' "+ " <if test='studentName!=null'> and SYS_USER.USER_NAME like '%${studentName}%'</if> "+ " <if test='teamName!=null'> and KBS_TEAM.TEAM_NAME=#{teamName} </if> "+ "</script>")
public ArrayList<KbsStudent> queryStudents(Map<String,Object> map);
//IKbsStudentService//搜索学员(按组名和学员姓名模糊查询,参数可为空)
public QueryResultObject queryStudents(Map<String,Object> map);
//KbsStudentService implements IKbsStudentService@Override
//搜索学员(按组名和学员姓名模糊查询,参数可为空)
public QueryResultObject queryStudents(Map<String,Object> map) {ArrayList<KbsStudent> studentList=kbsStudentDao.queryStudents(map);return RestUtils.wrappQueryResult(studentList);
}
//KbsStudentController@Autowired
private KbsStudentService kbsStudentService;//搜索学员(按组名和学员姓名模糊查询,参数可为空)
@ApiOperation("搜索培训学员(参数可为空)")
@RequestMapping(value="/queryStudents",method=RequestMethod.POST)
public WrappedResult queryStudents(@RequestBody JSONObject json,HttpServletResponse response) {HashMap<String, Object> map=new HashMap<String, Object>();String studentName=json.getString("studentName");String teamName=json.getString("teamName");map.put("studentName", studentName);map.put("teamName",teamName);//********************if(teamName=="" ){map.put("teamName",null);}//********************try{QueryResultObject result=kbsStudentService.queryStudents(map);logger.info("查询成功");return WrappedResult.successWrapedResult(result);}catch(Exception e){logger.error(e.getMessage(),e);String errorMessage="查询异常";if(isDev){errorMessage=e.getMessage();}return WrappedResult.failedWrappedResult("查询异常");}
}

3.运行结果

SQL执行如下

select distinct SYS_USER.USERID as studentID,SYS_USER.USER_NAME as studentName

from SYS_USER LEFT

JOIN SYS_USER_ROLE on SYS_USER.USERID=SYS_USER_ROLE.USERID RIGHT

JOIN KBS_TEAM_USER on SYS_USER.USERID=KBS_TEAM_USER.USER_ID RIGHT

JOIN KBS_TEAM on KBS_TEAM.TEAM_ID=KBS_TEAM_USER.TEAM_ID

WHERE ROLEID='ROLE_STUDENT'

and SYS_USER.USER_NAME like '%程%'

动态SQL中if标签:test判断的null和“ “的问题相关推荐

  1. mybatis动态sql中where标签的使用

    where标记的作用类似于动态sql中的set标记,他的作用主要是用来简化sql语句中where条件判断的书写的,如下所示: <select id="selectByParams&qu ...

  2. 动态SQL之foreach标签(批量删除)

    动态SQL之foreach标签(批量删除) foreach标签的属性 collection:设置要循环的数组或集合 item:用一个字符串表示数组或集合中的每一个数据 separator:设置每次循环 ...

  3. ORACLE 动态SQL中的多个单引号

    今天在项目中遇到动态拼sql的语句, 语句如下: v_sql := 'update Table_Test t ' ||' set t.field1 = ''' || 变量1 || ''','  -- ...

  4. [网摘]动态SQL中set与select对变量赋值的影响

    在动态SQL中,存在着多种对字符变量赋值的方法.其中set和select使用的朋友最多.对于像我一样的小鸟来说,可能只是会用这两个方法而已,并没有真正理解这两个方法的真正内涵.我个人的理解是这样的:s ...

  5. sql动态sql给变量复值_在动态SQL中使用变量

    sql动态sql给变量复值 Before we delve into these SQL concepts, note that I like to do all my development in ...

  6. oracle 更新sysdate,如何使用sysdate更新日期列,包括动态sql中的时间戳

    Lalit Kumar .. 9 我已经尝试使用to_date(to_char(sysate)),但缺少时间戳 这样做是没有意义的. 为什么PL/SQL执行这么简单的任务.在纯SQL中执行此操作.UP ...

  7. Mybatis学习笔记之---动态sql中标签的使用

    动态Sql语句中标签的使用 (一)常用标签 1.<if> if标签通常用于WHERE语句中,通过判断参数值来决定是否使用某个查询条件, 他也经常用于UPDATE语句中判断是否更新某一个字段 ...

  8. mybatis中动态sql常用的标签

    用来循环容器的标签forEach,查看例子 //mapper中我们要为这个方法传递的是一个容器,将容器中的元素一个一个的 //拼接到xml的方法中就要使用这个forEach这个标签了 public L ...

  9. mybatis动态sql中的where标签的使用

    From: https://blog.csdn.net/wobuaizhi/article/details/81874664 在使用mybatis的动态sql时,有时候遇到根据条件判断添加where后 ...

最新文章

  1. 青少年编程竞赛交流群周报(第038周)
  2. MF0 AI+IoT K210 人脸识别模块 应用笔记-(1)
  3. SAP 物料清单 BOM
  4. jQuery插件备忘
  5. input子系统基础之按键1——什么是input子系统?
  6. 9名程序员被抓!这次我并不同情他们!
  7. jrebel 远程部署 配置记录
  8. 网页类型定义DOCTYPE
  9. List中对象model的排序问题
  10. springMVC3学习(八)--全球异常处理
  11. (Dijkstra)迪杰斯特拉算法-最短路径算法
  12. 关于python提交spark以及在spark环境中使用本地包的方法--针对于集群无法在线下包以及python版本和spark绑定的问题解决
  13. C++编写的在控制台界面操作的吃豆子游戏的代码
  14. 计算机中的物理结构,文件的物理结构_文件的物理结构有哪3种,分别具备什么优缺点...
  15. Linux 打包压缩与解压解包
  16. Ambarella面试小结
  17. D3.js 绘制立体柱状图
  18. 关于高通QPST平台功能和选项的一些简单说明
  19. 如何选择正确的RF连接器
  20. 从IT开发人员到IT行业专家的IT职业规划

热门文章

  1. 基于Java毕业设计阳光社区新冠瘦苗接种系统源码+系统+mysql+lw文档+部署软件
  2. C# 接口和抽象类的区别和使用场景
  3. [转载]Numpy 基本除法运算和模运算
  4. Zbrush一些基本操作
  5. Javaweb入职第二天
  6. 大三上期末复习(网络安全物联网概论安全协议软件工程)
  7. 群晖 NAS 通过 frp 实现内网穿透
  8. Unity脚本介绍和常用API
  9. 打开Docx文件的方法
  10. 信道检测手机软件 ios_一分钟,教你检测iPhone硬件故障