一、痛点分析:公共字段维护的三大困境
1.1 典型问题场景
// 订单创建逻辑publicvoidcreateorder(orderdto dto){ order order = converttoentity(dto); // 手动设置公共字段 order.setcreatetime(localdatetime.now()); order.setupdatetime(localdatetime.now()); order.setcreateuser(getcurrentuser()); order.setupdateuser(getcurrentuser()); ordermapper.insert(order);} // 订单更新逻辑 publicvoidupdateorder(orderdto dto){ order order = converttoentity(dto); // 重复设置逻辑 order.setupdatetime(localdatetime.now()); order.setupdateuser(getcurrentuser()); ordermapper.updatebyid(order);}
ai生成项目go运行
痛点总结:
- 代码重复率高(每个service方法都要设置)
- 维护成本高(字段变更需修改多处)
- 容易遗漏(特别是更新操作)
二、基础方案:mybatis-plus自动填充
2.1 配置元对象处理器
@slf4j@componentpublicclassautofillhandlerimplementsmetaobjecthandler{ // 插入时自动填充 @override publicvoidinsertfill(metaobject metaobject){ this.strictinsertfill(metaobject, "createtime", localdatetime.class, localdatetime.now()); this.strictinsertfill(metaobject, "createuser", string.class, getcurrentuser()); this.strictupdatefill(metaobject, "updatetime", localdatetime.class, localdatetime.now()); this.strictupdatefill(metaobject, "updateuser", string.class, getcurrentuser()); } // 更新时自动填充 @override publicvoidupdatefill(metaobject metaobject){ this.strictupdatefill(metaobject, "updatetime", localdatetime.class, localdatetime.now()); this.strictupdatefill(metaobject, "updateuser", string.class, getcurrentuser()); } // 获取当前用户(从安全上下文) private string getcurrentuser(){ return optional.ofnullable(securitycontextholder.getcontext()) .map(securitycontext::getauthentication) .map(authentication::getname) .orelse("system"); }}
ai生成项目go运行