简明Mybatis教程之动态SQL-choose(when、otherwise)

简单介绍一下,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>

也就是打印输出执行过程的日志。

友情提示:最好的学习方法是自己动手实践,能发现很多肉眼看不到的问题。

支持转载,注明出处。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值