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

来源:互联网 发布:android自带数据库 编辑:程序博客网 时间:2024/05/16 17:02

和之前的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之setUser 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标记,欢迎指出不足之处,互相交流,谢谢。

阅读全文
0 0
原创粉丝点击