因为之前使用mybatis,都是直接使用的mybatis-spring-boot-starter,通过这个starter模块间接引入的mybatis。目前使用的版本到了2.1.3,其使用的mybatis版本为3.5.5。
切换项目组后,使用了通用mapper,基于tk.mybatis模块间接依赖的mybatis,其使用的mybatis版本停留在3.4.5。
因为用习惯了高版本的mybatis,降版本到没太关注变更差异,故而一些使用习惯直接复用了过来。比如update时使用<set />标签进行,的自动删除。
针对这个标签,在3.5.0有一个变更,其与3.4.X版本的语义表达有差异。
3.4.X的代码如下:
public class SetSqlNode extends TrimSqlNode { private static List<String> suffixList = Arrays.asList(","); public SetSqlNode(Configuration configuration,SqlNode contents) { super(configuration, contents, "SET", null, null, suffixList); } }
其仅处理以,结尾多余的“,”。
3.5.0的代码如下:
public class SetSqlNode extends TrimSqlNode { private static final List<String> COMMA = Collections.singletonList(","); public SetSqlNode(Configuration configuration,SqlNode contents) { super(configuration, contents, "SET", COMMA, null, COMMA); } }
其允许处理set标签包裹SQL块前后多余的",",比之前增加了一个前缀多余的处理。
具体的大版本变化差异:
https://github.com/mybatis/mybatis-3/releases/tag/mybatis-3.5.0
以后使用关键包如果跨大版本一定要仔细看看变更记录,不然出bug太容易了。