老司机学习MyBatis之动态SQL使用choose分支

一、前言

choose元素的作用就相当于Java语法中的switch语句,跟SQL语法case..when..then..else也差不多,基本上跟JSTL中的choose的作用和用法是一样的,通常都是与when和otherwise搭配的。

二、案例

EmpMapper类

/**
 * 根据部门ID查询该部门下的所有员工信息
 * @param id
 * @return
 */
public Emp findEmpByConditionsChoose(Emp emp);

EmpMapper.xml文件,增加choose相关语法配置


注意:这里使用choose,最终拼成的SQL条件只有一个,它不像 if 语句,如果有多个条件满足,最终的SQL语句里面会有多个条件。

增加测试方法testFindEmpByConditionChoose

@Test
public void testFindEmpByConditionChoose() throws IOException {
	SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
	SqlSession openSession = sqlSessionFactory.openSession();
	try {
		EmpMapper mapper = openSession.getMapper(EmpMapper.class);
		Emp emp = new Emp(1,"queen","[email protected]",null);
		Emp empFind = mapper.findEmpByConditionsChoose(emp);
		System.out.println(empFind);
	} finally {
		openSession.close();
	}
}

控制台打印结果如下

2017-08-12 22:45:32,673 [main] [com.queen.mybatis.mapper.EmpMapper.findEmpByConditionsChoose]-[DEBUG] ==>  Preparing: select id,emp_name empName,emp_email empEmail, dept_id deptId from t_emp WHERE id=? 
2017-08-12 22:45:32,728 [main] [com.queen.mybatis.mapper.EmpMapper.findEmpByConditionsChoose]-[DEBUG] ==> Parameters: 1(Integer)
2017-08-12 22:45:32,768 [main] [com.queen.mybatis.mapper.EmpMapper.findEmpByConditionsChoose]-[DEBUG] <==      Total: 1
Emp [id=1, empName=queen, [email protected], deptId=1]

如上,可以明显的看到SQL语句中条件只有一个,因为id不为空,所以以id为条件查询,其他的条件就不用了

现在将查询条件修改一下


再次测试一下,查看控制台SQL语句是否改变?

2017-08-12 22:53:52,250 [main] [com.queen.mybatis.mapper.EmpMapper.findEmpByConditionsChoose]-[DEBUG] ==>  Preparing: select id,emp_name empName,emp_email empEmail, dept_id deptId from t_emp WHERE emp_name=? 
2017-08-12 22:53:52,306 [main] [com.queen.mybatis.mapper.EmpMapper.findEmpByConditionsChoose]-[DEBUG] ==> Parameters: queen(String)
2017-08-12 22:53:52,345 [main] [com.queen.mybatis.mapper.EmpMapper.findEmpByConditionsChoose]-[DEBUG] <==      Total: 1
Emp [id=1, empName=queen, [email protected], deptId=1]

如上,我们看到SQL语句中条件变成了emp_name且只有一个条件


=======欢迎大家拍砖,小手一抖,多多点赞哟!=======

版权声明:本文为博主原创文章,允许转载,但转载必须标明出处。


猜你喜欢

转载自blog.csdn.net/gaomb_1990/article/details/80640411