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