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

博客讨论了前端传入JSON数据到后端时,如何处理`teamName`字段的空值情况,以及这对后端SQL查询条件的影响。当`teamName`为空字符串时,条件`studentName!=null`为真,SQL执行包含模糊匹配;而当`teamName`为`null`时,条件不成立,SQL中不包含团队名称的过滤条件。代码示例展示了从DAO到Service再到Controller的处理流程。
摘要由CSDN通过智能技术生成

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 '%程%'

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值