一、choose 标签
choose 主要用于分支判断,类似于 java 中带了 break的 switch...case,只会满足所有分支中的一个。
语法格式:
<choose>
<when test=""> 通过test表达式拼接SQL
<when test="">
<otherwise></otherwise> 当when都不符合条件,就会选择otherwise拼接SQL
</choose>
标签说明:
<choose>:选择某一个 when 或 otherwise 拼接 SQL
<when>:通过 test 表达式拼接 SQL;
<otherwiese>:当 when 都不符合条件,就会选择 otherwise 拼接 SQL
注意:<choose> 只会往 SQL 语句中添加一个条件(相当于带了break的 switch...case)。
二、代码示例
1、在接口中声明方法
public List<Employee> getEmpsByConditionChoose(Employee employee);
2、在对应的 xml 中进行配置
<!--
如果带了id就用id查,如果带了lastName就用lastName查,只会进入其中一个
choose (when, otherwise):分支选择,带了break的 swtich...case
-->
<!--
public List<Employee> getEmpsByConditionChoose(Employee employee);
-->
<select id="getEmpsByConditionChoose" resultType="Employee">
select * from tbl_employee
<where>
<choose>
<when test="id!=null">
id=#{id}
</when>
<when test="lastName!=null and lastName!=''">
last_name like #{lastName}
</when>
<when test="email!=null">
email=#{email}
</when>
<otherwise>
gender = 0
</otherwise>
</choose>
</where>
</select>
3、运行SQL语句
select * from tbl_employee where id=?
当第一个 when 成立时,后面的就不再进行拼接
select * from tbl_employee where gender=0
当前面的 when 都不成立时,就会拼接 otherwise 中的语句。
三、使用 choose 实现添加
添加员工时,如果性别为'男',设置为'男',如果为'女',设置为'女',其他信息设置为'不详'
在接口中声明方法:
//添加员工信息,设置性别
public void insertEmpByConditionChoose(Employee employee);
在对应的 xml 中配置:
<!-- public void insertEmp(Emp emp); -->
<insert id="insertEmp">
insert into tbl_employee(id, last_name, email, gender) values(
null,
#{lastName},
#{email},
<choose>
<when test='gender == "男"'>'男'</when>
<when test='gender == "女"'>'女'</when>
<otherwise>'不详'</otherwise>
</choose>
)
</insert>
执行的 SQL:
insert into tbl_employee(id, last_name, email, gender) values( ?, ?, ?, '不详' )
insert into tbl_employee(id, last_name, email, gender) values( ?, ?, ?, '男' )