一. 例子
EmployeeMapperDynamicSQL.java
package com.atguigu.mybatis.dao;
import java.util.List;
import com.atguigu.mybatis.beans.Employee;
public interface EmployeeMapperDynamicSQL {
public List<Employee> selectEmployeeByConditionChoose(Employee condition);
}
EmployeeMapperDynamicSQL.xml
<!-- public List<Employee> selectEmployeeByConditionChoose(Employee condition); -->
<select id="selectEmployeeByConditionChoose" resultType="com.atguigu.mybatis.beans.Employee">
select id, last_name, email, gender from tbl_employee
<where>
<choose><!-- 最多只能匹配到一个when,如果没有匹配到when,则执行otherwise,类似于switch-case的语句 -->
<when test="id!=null">
id = #{id}
</when>
<when test="lastName!=null">
last_name = #{lastName}
</when>
<when test="email!=null">
email = #{email}
</when>
<otherwise><!-- 前面几个when都没有执行,则执行otherwise -->
gender = 0
</otherwise>
</choose>
</where>
</select>
TestMyBatisDynamicSQL.java
@Test
public void testChoose() throws Exception{
SqlSessionFactory ssf = getSqlSessionFactory();
SqlSession session = ssf.openSession();
try {
EmployeeMapperDynamicSQL mapper = session.getMapper(EmployeeMapperDynamicSQL.class);
Employee condition = new Employee();
// condition.setId(1001);
// condition.setLastName("刚哥");
// condition.setEmail("gg@sina.com");
// condition.setGender("0");
List<Employee> emps = mapper.selectEmployeeByConditionChoose(condition);
System.out.println(emps);
session.commit();
} finally {
// TODO: handle finally clause
session.close();
}
}