项目场景:服务进行重构时发现部分主键是采用的自定义主键的方式,不考虑特殊性则可以直接@TableId(value = “XXX”, type = IdType.ASSIGN_UUID) 直接自动生成uuid,以下时特殊情况
当前mybatis-plus的版本号是3.5.2
尝试过的其他方法:
1.自定义主键生成策略:实现IdentifierGenerator类,将自定义主键生成策略注册到 MyBatis,前缀固定不可行,多表多前缀。
2.在插入前操作:实现Interceptor类beforeInsert(Insert insert)方法,版本废弃
最终解决方案:
通过实现MetaObjectHandler类进行处理
例如:
在新增时进行某些处理。
@Override
public void insertFill(MetaObject metaObject) {
if (metaObject.hasGetter("tableName")) {
// 在插入操作时自动填充主键字段的值
if ("表名a".equals(metaObject.getValue("tableName"))) {
this.setFieldValByName("主键A", "AAA" + UUID.randomUUID(), metaObject);
this.setFieldValByName("操作时间", 时间(数据库中对应类型), metaObject);
}
if ("表名b".equals(metaObject.getValue("tableName"))) {
this.setFieldValByName("主键B", "BBB" + UUID.randomUUID(), metaObject);
}
}
this.setFieldValByName("创建时间", 时间(数据库中对应类型), metaObject);
this.setFieldValByName("修改时间", 时间(数据库中对应类型), metaObject);
}
在修改时进行某些处理。
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("修改时间", 时间(数据库中对应类型), metaObject);
}