Mybaits动态SQL之choose标签和子标签when,otherwise

本文介绍了Mybatis中动态SQL的choose标签及其子标签when和otherwise的使用方法。通过示例展示了如何根据条件动态生成SQL,包括根据名字、年龄判断以及所有条件为空时的默认操作,即查询所有记录并按id倒序排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybaits动态SQL之choose标签和子标签when,otherwise

choose也是根据条件判断生成sql,如果前面的条件成立,后面的所有条件忽略。与if标签相反。

写一个含choose标签动态sql

条件查询 user

  • 首先判断名字是否为空,根据名字来判断
  • 根据年龄来判断
  • 前面两个都为空,查询所有,根据id倒序排序。
  		<!-- 
  			首先判断name是否为空 如果不为空根据name查询 结束
  			   如果name为空 判断age是否传达, 不为空大于0 根据age查询
  			   否则根据id倒序
  		 -->
  		<select id="query2" resultType="user" parameterType="user">
  			select 
  				* 
  			from 
  				t_user
  			where 1=1
  			<choose>
  				<when test="name != null">
  					and name = #{name}
  				</when>
  				<when test="age!= null and age > 0">
  					and age = #{age}
  				</when>
  				<otherwise>
  					order by id desc
  				</otherwise>
  			</choose>
  		</select>

测试一下,根据根据id倒序排序

	@Test
	public void test3() throws IOException {
		InputStream in = Resources.getResourceAsStream("mybatis-cfg.xml");
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
		SqlSession session = factory.openSession(true);
		// 获取代理类
		UserMapper dao = session.getMapper(UserMapper.class);
		User user = new User();
		//user.setName("李四");
		//user.setAge(22);
		List<User> list = dao.query2(user);
		for (User user2 : list) {
			System.out.println(user2);
		}
		session.close();
	}

打印结果粘贴

[QC] DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(159) | ==>  Preparing: select * from t_user where 1=1 order by id desc 
[QC] DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(159) | ==> Parameters: 
[QC] DEBUG [main] org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(159) | <==      Total: 15
User [id=51, name=zhangsan2, age=27]
User [id=50, name=zhangsan1, age=26]
User [id=49, name=zhangsan, age=25]
User [id=48, name=uw, age=22]
User [id=47, name=zhangsan2, age=27]
User [id=46, name=zhangsan1, age=26]
User [id=45, name=zhangsan, age=25]
User [id=44, name=uw, age=22]
User [id=43, name=zhangsan2, age=27]
User [id=42, name=zhangsan1, age=26]
User [id=41, name=zhangsan, age=25]
User [id=40, name=cjw, age=18]
User [id=39, name=cjw, age=18]
User [id=37, name=cjw, age=18]
User [id=1, name=猴子, age=18]

总结

项目打包 提取码:3v4k 环境:eclipse,maven

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值