springboot 公共字段自动填充的6种神技,开发效率飙升!-尊龙官网入口

一、痛点分析:公共字段维护的三大困境
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运行
网站地图