MyBatis动态SQL之 set 和 trim标记的使用

和之前的where一样,set和trim也是智能标记 

在之前的user.xml中添加

<update id="updateUserSet" parameterType="User">
		update User
		<set>
			<if test="userName != null">userName=#{userName},</if>
			<if test="password != null">password=#{password},</if>
		</set>
		where id=#{id}
	</update>

再在测试代码的try中添加

//动态SQL之set
			User oneUser=new User();
			oneUser.setId(10);
			oneUser.setUserName("kobe10");
			oneUser.setPassword("10kobe");
			//set标记
			session.update("updateUserSet",oneUser);
			session.commit();

运行,执行的SQL语句是 update User SET userName=?, password=? where id=?

set 自动识别并把sql语句中第二个逗号去掉的。此时数据库user表中id为10的username和password都被修改了。

//trim

trim标识为格式化标识,可以与其他标识完成where和set的功能

prefix  前缀增加   suffix  后缀增加    prefixOverrides 自动判断前置   suffixOverrides 自动判断后置

接着来测试一下,在user.xml中添加

<update id="updateUserTrim" parameterType="User">
		UPDATE User 
      		<trim prefix="SET" suffixOverrides="," suffix="WHERE id = #{id}" >  
	    		<if test="userName != null and userName != '' ">  
            			userName = #{userName},
       	 		</if>
        		<if test="password != null and password != '' ">  
             			password=#{password},
        		</if>  
	  	</trim>

与上面的set语句对比,prefix="SET" 是为SQL语句设置前缀,suffixOverrides是自动判断后缀 ","  

  suffix="WHERE id = #{id}" 是自动在加上后缀

在测试代码try中加入

        User oneUser=new User();
		oneUser.setId(10);
		oneUser.setUserName("kobe10");
		oneUser.setPassword("10kobe");
		//trim标记
		session.update("updateUserTrim",oneUser);
		session.commit();

运行,执行的SQL代码还是UPDATE User SET userName = ?, password=? WHERE id = ? 

代替where的就是添加 prefix="where"  prefixOverrides="and|or"  trim就会自动的添加前缀where和自动识别和去掉不用的and或or

以上便是MyBatis动态SQL的set标记和trim标记,欢迎指出不足之处,互相交流,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值