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

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

在之前的user.xml中添加

?
1
2
3
4
5
6
7
8
< 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中添加

?
1
2
3
4
5
6
7
8
//动态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中添加

?
1
2
3
4
5
6
7
8
9
10
< 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中加入

?
1
2
3
4
5
6
7
         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标记,欢迎指出不足之处,互相交流,谢谢。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值