您的位置:首页 > 数据库

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

2016-04-13 18:34 656 查看
摘要: 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标记,欢迎指出不足之处,互相交流,谢谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息