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且只有一个条件
=======欢迎大家拍砖,小手一抖,多多点赞哟!=======
版权声明:本文为博主原创文章,允许转载,但转载必须标明出处。