最近公司升級(jí)項(xiàng)目掰烟,從mybatis升級(jí)到mybatisPlus,Plus的簡(jiǎn)潔沐批,少寫(xiě)代碼和mapper,讓我們喜歡上了它蝎亚。
再配合代碼生成器九孩,繼承抽象基類,基本上CRUD不再需要擼代碼发框。
但是也有更多的坑躺彬,因底層是利用反射來(lái)生成xml或者返回pojo,所以對(duì)于字段的駝峰命名更加不能亂來(lái)梅惯。
因?yàn)閙ybatisPlus是基于注解的方式來(lái)反射做映射宪拥,做需要在Mapper文件添加@Mapper注解,需要在entity添加@TableName铣减。
另一個(gè)坑是mybatisPlus和sharding-jdbc的坑她君,sharding-jdbc對(duì)某些sql語(yǔ)法的支持不是很好,比如distinct就不支持葫哗。還有傳值需要帶著分片key缔刹,這無(wú)疑給老項(xiàng)目遷移升級(jí)帶來(lái)了bug挑戰(zhàn)球涛。分片,還需要自己做ShardingStrategy校镐。
另外一個(gè)問(wèn)題亿扁,mysql時(shí)間格式是支持“0000-00-00 00:00:00”這種特殊的值的,但是java的date不支持鸟廓。會(huì)在映射的時(shí)候報(bào)錯(cuò)从祝,這時(shí)候需要在Jdbc配置上,加上一句 ?zeroDateTimeBehavior=convertToNull引谜,即可解決哄褒。或者在mysql的timestamp格式的字段設(shè)置默認(rèn)值為null或者CurrentTimestamp
例如
jdbc:mysql://${common.wcp.mysql.jdbc_host}/${common.wcp.mysql.jdbc_database}?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true