简单介绍一下,mybatis中自带choose,相当于switch-case,也即分支选择,意思是如果有哪个字段就用这个字段查,没有就用其它的,再简单点说就是,
if(){
}else if(){
}else….
这种结构。
不多说,直接上代码:
1.DynamicSQLMapper.xml
<select id="getEmpByConditionChoose" resultType="mybatis.learn.bean.Employee">
select * from xjinfo
<where>
<choose>
<when test="xh!=null">
XH=#{xh}
</when>
<when test="xm!=null">
XM=#{xm}
</when>
<otherwise>
YJSLB = '硕士'
</otherwise>
</choose>
</where>
</select>
注意:1> 这里的<where></where>标签可以手打,也可以放在 每个查询条件前面,比如放到
XH=#{xh}
之前;
2.映射类-DynamicSQLMapper.java:
public List<Employee> getEmpByConditionChoose(Employee employee);
3.然后我们写一个测试类:
@Test
public void testChoose() throws IOException{
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession openSession = sqlSessionFactory.openSession();
try {
EmployeemapperDynamicSQL mapper = openSession.getMapper(EmployeemapperDynamicSQL.class);
Employee employee = new Employee("12345",null,"硕士");
List<Employee> emps = mapper.getEmpByConditionChoose(employee);
for (Employee emp : emps) {
System.out.println(emp);
}
} finally {
openSession.close();
}
}
运行时请看官们注意观察控制台打印的SQL语句,当我们把第一个参数设置非null时,请看执行的SQL语句:
然后我们把第一个参数设为null,第二个参数为非null,再来观察执行的SQL语句:
where查询条件已经从XH变为XM;
现在大家应该已经明白,如果第一个参数为null,则传入第二个参数执行SQL,也就是if…else判定。
另外补充一点,想要在控制台打印出执行的SQL语句以及传入的参数,可以在mybatis-config.xml中加入:
<settings>
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
也就是打印输出执行过程的日志。
友情提示:最好的学习方法是自己动手实践,能发现很多肉眼看不到的问题。
支持转载,注明出处。