动态SQL之choose、when、otherwise标签
- choose、when、otherwise
- chose:父标签
- when:相当于if...else if,只要有一个条件成立,其它的都不判断了
- otherwise:相当于else,若所有条件都不成立,则执行otherwise
- when至少设置一个,otherwise最多设置一个
DynamicSQLMapper接口
public interface DynamicSQLMapper {
/**
* 使用choose查询员工的信息
* @param emp
* @return
*/
List<Emp> getEmpByChoose(Emp emp);
}
MyBatis的映射文件DynamicSQLMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.mybatis.mapper.DynamicSQLMapper">
<!--List<Emp> getEmpByChoose(Emp emp);-->
<select id="getEmpByChoose" resultType="Emp">
select * from t_emp
<where>
<choose>
<when test="empName != null and empName != ''">
emp_name = #{empName}
</when>
<when test="age != null and age != ''">
age = #{age}
</when>
<when test="gender != null and gender != ''">
gender = #{gender}
</when>
</choose>
</where>
</select>
</mapper>
测试
public class DynamicMapperTest {
@Test
public void testGetEmpByChoose(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
DynamicSQLMapper mapper = sqlSession.getMapper(DynamicSQLMapper.class);
Emp emp = new Emp(null,"张三",20,"男");
List<Emp> list = mapper.getEmpByChoose(emp);
list.forEach(System.out::println);
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/a268570709e6884f2d105969db9e41f9.png)