MyBatis动态SQL之choose和where的使用示例

首先在之前的user表中,确定一下表中的数据先

004707_Dnpi_2437179.jpg

在之前的User.xml中添加SQL语句

<select id="selectUserChoose" resultType="User" parameterType="User">
	select * from BSuser where 1=1
		<choose>  //判断用户名,如果为空就判断ID,最后判断密码不为空
			<when test="userName!=null">
				and userName like #{userName}
			</when>
			<when test="id!=0">
				and id =#{id}
			</when>
			
			<otherwise>
				and password is not null
			</otherwise>
		</choose>
	</select>

在测试类中的try内写入代码

try{
			
			//动态SQL之 choose 与where
			User oneUser=new User();
			oneUser.setUserName("%k%");
			List<User> ap=session.selectList("selectUserChoose",oneUser);
			for(User temp:ap) {		
			System.out.println("用户ID="+temp.getId()+"用户名="+temp.getUserName());
			}

运行,输出结果是

  用户ID=2用户名=kobe01

用户ID=3用户名=kobe02

用户ID=8用户名=kobe03

执行的SQL代码是select * from user where 1=1 and userName like ? 

//where

在User.xml中添加

<select id="selectUserWhere" resultType="User" parameterType="User">
	select * from user  
		<where>
			<if test="userName!=null">
				and userName like #{userName}
			</if>
			<if test="id!=null">
				and id =#{id}
			</if>
		</where>
</select>

在测试类中写入

try{
			//动态SQL之where
			User oneUser=new User();
			oneUser.setId(10);
			//where标记
			List<User> ap=session.selectList("selectUserWhere",oneUser);
			for(User temp:ap) {		
			System.out.println("用户ID="+temp.getId()+"用户名="+temp.getUserName());
		}

输出的结果为  用户ID=10用户名=1

执行的SQL语句为 select * from jikeuser WHERE id =? 

where智能的去掉了sql语句中id前的and

若在setId前加上 oneUser.setUserName("%k%"); 输出为空

若加上后把id设为3,则输出为  用户ID=3用户名=kobe02

where又智能的去掉了username前的and

如此便利用了MyBais的where动态控制输出了。

以上便是MyBatis动态SQL中的choose和where,欢迎指出不足之处,互相讨论,谢谢。

转载于:https://my.oschina.net/xiaozhiwen/blog/496134

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值