最近公司升级项目,从mybatis升级到mybatisPlus,Plus的简洁,少写代码和mapper,让我们喜欢上了它。
再配合代码生成器,继承抽象基类,基本上CRUD不再需要撸代码。
但是也有更多的坑,因底层是利用反射来生成xml或者返回pojo,所以对于字段的驼峰命名更加不能乱来。
因为mybatisPlus是基于注解的方式来反射做映射,做需要在Mapper文件添加@Mapper注解,需要在entity添加@TableName。
另一个坑是mybatisPlus和sharding-jdbc的坑,sharding-jdbc对某些sql语法的支持不是很好,比如distinct就不支持。还有传值需要带着分片key,这无疑给老项目迁移升级带来了bug挑战。分片,还需要自己做ShardingStrategy。
另外一个问题,mysql时间格式是支持“0000-00-00 00:00:00”这种特殊的值的,但是java的date不支持。会在映射的时候报错,这时候需要在Jdbc配置上,加上一句 ?zeroDateTimeBehavior=convertToNull,即可解决。或者在mysql的timestamp格式的字段设置默认值为null或者CurrentTimestamp
例如
jdbc:mysql://${common.wcp.mysql.jdbc_host}/${common.wcp.mysql.jdbc_database}?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true