1、我们的业务是如果带了id就用id查,如果带了lastName就用lastName查,只会进入进入一个查询。在DAO中顶一个方法:package com.gwolf.dao;import java.util.Map;import org.apache.ibatis.annotations.MapKey;import com.gwolf.bean.Employee;public interface EmployeeMapper { public List<Employee> getEmpsByConditionChoose(Employee employee); }
2、在xml中定义choose的sql语句定义。<select id="getEmpsByConditionChoose" resultMap="MyEmpByStep" databaseId="mysql"> select * from tbl_emp <where> <choose> <when test="empId!=null"> emp_id = #{empId} </when> <when test="empName!=null"> emp_name = #{empName} </when> </choose> </where>
3、编写junit单元测试方法:@Test public void test1() throws Exception { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); try { EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class); Employee employee = new Employee(); employee.setEmpId(1); List<Employee> employees = employeeMapper.getEmpsByConditionChoose(employee); System.out.println(employees); }finally { sqlSession.close(); } }
4、当我们只根据员工id查询的时候,我们的sql只会查询出员工的where子句,运行单元结果,查看控制台sql语句
5、编写根据员工和姓名查询的junit单元测试方法: @Test public void test1() throws Exception { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); try { EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class); Employee employee = new Employee(); employee.setEmpId(1); employee.setEmpName("曹"); List<Employee> employees = employeeMapper.getEmpsByConditionChoose(employee); System.out.println(employees); }finally { sqlSession.close(); } }
6、当我们查询条件员工id和员工姓名的时候,我们的sql也只会查询出员工的where子句,运行单元测试,查看后台sql语句打印结果。