1. where标签的作用:如果该标签包含的元素中有返回值,就插入一个where;如果where后面的字符是以AND和OR开头的,就讲他们剔除。
int findUserByWhere(@Param("name") String name, @Param("phone") String phone);
SELECT * FROM user
AND name LIKE concat('%', #{name}, '%')
OR phone=#{phone}
如果两个if条件不满足的时候,where标签包着的这一段代码就会被剔除掉,在SQL中就不会出现这一段代码。
2.set标签的作用:如果该标签包含的元素中有返回值,就插入一个set;如果set后面的字符串是以逗号结尾的,就将这个逗号剔除。
int updateUser(@Param("user") User user);
UPDATE user
email=#{user.email},
phone=#{user.phone},
WHERE uid=#{user.uid}
注意最后的WHERE uid=#{user.uid}不可省略的,如果set包含的内容为空,只能避免最后遗留的逗号问题
3.trim用法:
标签属性:
prefix:当trim元素包含内容时,会给内容增加prefix指定的前缀
prefixOverride:当trim元素包含内容时,会把内容中匹配的前缀字符串去掉。
suffix:当trim元素包含内容时,会给内容增加prefix指定的后缀
suffixOverride:当trim元素包含内容时,会把内容中匹配的后缀字符串去掉。
和标签都可以用trim标签实现,并且底层就是通过TrimSqlNode实现的。
标签对应的trim实现:
例子:
SELECT * FROM user
AND NAME LIKE concat('%', #{name}, '%')
OR phone=#{phone}
标签对应的trim实现:
例子:
UPDATE user
email=#{user.email},
phone=#{user.phone}
WHERE uid =#{user.uid}
提示:
prefixOverride中AND和OR后面的空格不能省略,为了避免匹配到andes或orders等单词。实际上prefixOverride包含"AND""OR""AND\n""OR\n""AND\r""OR\r""AND\t""OR\t"