动态SQL中if标签:test判断的null和“ “的问题
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和“ “的问题相关推荐
- mybatis动态sql中where标签的使用
where标记的作用类似于动态sql中的set标记,他的作用主要是用来简化sql语句中where条件判断的书写的,如下所示: <select id="selectByParams&qu ...
- 动态SQL之foreach标签(批量删除)
动态SQL之foreach标签(批量删除) foreach标签的属性 collection:设置要循环的数组或集合 item:用一个字符串表示数组或集合中的每一个数据 separator:设置每次循环 ...
- ORACLE 动态SQL中的多个单引号
今天在项目中遇到动态拼sql的语句, 语句如下: v_sql := 'update Table_Test t ' ||' set t.field1 = ''' || 变量1 || ''',' -- ...
- [网摘]动态SQL中set与select对变量赋值的影响
在动态SQL中,存在着多种对字符变量赋值的方法.其中set和select使用的朋友最多.对于像我一样的小鸟来说,可能只是会用这两个方法而已,并没有真正理解这两个方法的真正内涵.我个人的理解是这样的:s ...
- sql动态sql给变量复值_在动态SQL中使用变量
sql动态sql给变量复值 Before we delve into these SQL concepts, note that I like to do all my development in ...
- oracle 更新sysdate,如何使用sysdate更新日期列,包括动态sql中的时间戳
Lalit Kumar .. 9 我已经尝试使用to_date(to_char(sysate)),但缺少时间戳 这样做是没有意义的. 为什么PL/SQL执行这么简单的任务.在纯SQL中执行此操作.UP ...
- Mybatis学习笔记之---动态sql中标签的使用
动态Sql语句中标签的使用 (一)常用标签 1.<if> if标签通常用于WHERE语句中,通过判断参数值来决定是否使用某个查询条件, 他也经常用于UPDATE语句中判断是否更新某一个字段 ...
- mybatis中动态sql常用的标签
用来循环容器的标签forEach,查看例子 //mapper中我们要为这个方法传递的是一个容器,将容器中的元素一个一个的 //拼接到xml的方法中就要使用这个forEach这个标签了 public L ...
- mybatis动态sql中的where标签的使用
From: https://blog.csdn.net/wobuaizhi/article/details/81874664 在使用mybatis的动态sql时,有时候遇到根据条件判断添加where后 ...
最新文章
- 青少年编程竞赛交流群周报(第038周)
- MF0 AI+IoT K210 人脸识别模块 应用笔记-(1)
- SAP 物料清单 BOM
- jQuery插件备忘
- input子系统基础之按键1——什么是input子系统?
- 9名程序员被抓!这次我并不同情他们!
- jrebel 远程部署 配置记录
- 网页类型定义DOCTYPE
- List中对象model的排序问题
- springMVC3学习(八)--全球异常处理
- (Dijkstra)迪杰斯特拉算法-最短路径算法
- 关于python提交spark以及在spark环境中使用本地包的方法--针对于集群无法在线下包以及python版本和spark绑定的问题解决
- C++编写的在控制台界面操作的吃豆子游戏的代码
- 计算机中的物理结构,文件的物理结构_文件的物理结构有哪3种,分别具备什么优缺点...
- Linux 打包压缩与解压解包
- Ambarella面试小结
- D3.js 绘制立体柱状图
- 关于高通QPST平台功能和选项的一些简单说明
- 如何选择正确的RF连接器
- 从IT开发人员到IT行业专家的IT职业规划