在使用< if>元素时,只要test属性中的表达式为true,就会执行元素中的条件语句,但是在实际应用中,有时只需要从多个选项中选择一个去执行。
例如下面的场景: “当客户名称不为空,则只根据客户名称进行客户筛选; 当客户名称为空,而客户职业不为空,则只根据客户职业进行客户筛选。 当客户名称和客户职业都为空,则要求查询出所有电话不为空的客户信息。”
此种情况下,使用< if>元素进行处理是非常不合适的。如果使用的是 Java 语言,这种情况显然更适合使用switch…case…default语句来处理。那么在MyBatis中有没有类似的语句呢?答案是肯定的。针对上面情况,MyBatis中可以使用< choose>、< when>、< otherwise>元素进行处理。
映射文件代码
select * from t_customer where 1=1
and username like concat('%',#sername, '%')
and jobs= #{jobs}
and phone is not null
测试方法
/**
* 根据客户姓名或职业查询客户信息列表
*/
@Test
public void findCustomerByNameOrJobsTest() {
// 通过工具类生成SqlSession对象
SqlSession session = MybatisUtils.getSession();
// 创建Customer对象,封装需要组合查询的条件
Customer customer = new Customer();
customer.setUsername("jack");
customer.setJobs("teacher");
// 执行SqlSession的查询方法,返回结果集
List customers = session.selectList("com.itheima.mapper"
+ ".CustomerMapper.findCustomerByNameOrJobs", customer);
// 输出查询结果信息
for (Customer customer2 : customers) {
// 打印输出结果
System.out.println(customer2);
}
// 关闭SqlSession
session.close();
}
运行结果: