十、Mybatis的choose (when, otherwise)标签使用

choose标签的作用:

按顺序判断其内部when标签中的test条件出否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when 的条件都不满则时,则执行 otherwise 中的sql。类似于Java 的 switch 语句,choose 为 switch,when 为 case,otherwise 则为 default。

假设有一个user表,里面有username和sex字段,那么查询user的时候我可以按username来查找,也可以按sex来查找,对应的sql可以这样写:

select * from user where username = 'xx'

或者

select * from user where sex= 'xx'

也就是说对于多个条件只要有一个条件满足即可,这种情况只能使用choose 标签了;用if标签的话是实现不了的,因为if标签只要条件满足就会执行,但是我们并不想应用所有的条件,而只是想从多个选项中选择一个,choose标签就可以解决这个问题。

对应的mapper文件可以这样写:

<select id="findUserByNameOrSex" parameterType="blog.csdn.net.mchenys.pojo.User"
		resultType="blog.csdn.net.mchenys.pojo.User">
		
	select * from user 
	<where>
		<choose>
			<when test="username !=null and username !=''">
				 username = #{username}
			</when>
			<when test="sex !=null and sex !=''">
				 sex = #{sex}
			</when>
			<otherwise></otherwise>
		</choose>
	</where>	
</select>

假设测试方法是这样的

@Test
public void testFindUserByNameOrSex() {
	UserMapper userMapper = (UserMapper)applicatonContext.getBean("userMapper");
	User user = new User();
	user.setUsername("老陈");
	user.setSex("1");
	List<User> list = userMapper.findUserByNameOrSex(user);
	System.out.println(list);
}

执行后,查看控制台的sql语句,你会发现只输出了一个条件
在这里插入图片描述
虽然代码中是同时设置了username和sex这2个条件,但是由于when 标签先判断的是username,刚好也满足条件,所以就只按username来查询了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值