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