<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網(wǎng)易首頁(yè) > 網(wǎng)易號(hào) > 正文 申請(qǐng)入駐

      解放雙手:SpringBoot 公共字段自動(dòng)填充 6 種神技,開發(fā)效率飆升!

      0
      分享至

      Java精選面試題(微信小程序):5000+道面試題和選擇題,真實(shí)面經(jīng)簡(jiǎn)歷模版,包含Java基礎(chǔ)、并發(fā)、JVM、線程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架構(gòu)設(shè)計(jì)、大廠真題等,在線隨時(shí)刷題!

      在開發(fā)外賣系統(tǒng)訂單模塊時(shí),我發(fā)現(xiàn)每個(gè)實(shí)體類都包含create_time、update_by等重復(fù)字段。手動(dòng)維護(hù)這些字段不僅效率低下,還容易出錯(cuò)。

      本文將分享一套經(jīng)過生產(chǎn)驗(yàn)證的自動(dòng)化方案,涵蓋MyBatis-Plus、AOP、JWT等六種核心策略,助你徹底擺脫公共字段維護(hù)的煩惱。

      一、痛點(diǎn)分析:公共字段維護(hù)的三大困境 1.1 典型問題場(chǎng)景

      // 訂單創(chuàng)建邏輯 public void createOrder(OrderDTO dto) {     Order order = convertToEntity(dto);          // 手動(dòng)設(shè)置公共字段     order.setCreateTime(LocalDateTime.now());     order.setUpdateTime(LocalDateTime.now());     order.setCreateUser(getCurrentUser());     order.setUpdateUser(getCurrentUser());          orderMapper.insert(order); } // 訂單更新邏輯  public void updateOrder(OrderDTO dto) {     Order order = convertToEntity(dto);          // 重復(fù)設(shè)置邏輯     order.setUpdateTime(LocalDateTime.now());     order.setUpdateUser(getCurrentUser());          orderMapper.updateById(order); }

      痛點(diǎn)總結(jié):

      • 代碼重復(fù)率高(每個(gè)Service方法都要設(shè)置)

      • 維護(hù)成本高(字段變更需修改多處)

      • 容易遺漏(特別是更新操作)

      二、基礎(chǔ)方案:MyBatis-Plus自動(dòng)填充 2.1 配置元對(duì)象處理器

      @Slf4j @Component publicclass AutoFillHandler implements MetaObjectHandler {          // 插入時(shí)自動(dòng)填充     @Override     public void insertFill(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());     }     // 更新時(shí)自動(dòng)填充     @Override     public void updateFill(MetaObject metaObject) {         this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());         this.strictUpdateFill(metaObject, "updateUser", String.class, getCurrentUser());     }          // 獲取當(dāng)前用戶(從安全上下文)     private String getCurrentUser() {         return Optional.ofNullable(SecurityContextHolder.getContext())                       .map(SecurityContext::getAuthentication)                       .map(Authentication::getName)                       .orElse("system");     } }
      2.2 實(shí)體類注解配置

      @Data publicclass BaseEntity {     @TableField(fill = FieldFill.INSERT)     private LocalDateTime createTime;          @TableField(fill = FieldFill.INSERT_UPDATE)     private LocalDateTime updateTime;          @TableField(fill = FieldFill.INSERT)     private String createUser;          @TableField(fill = FieldFill.INSERT_UPDATE)     private String updateUser; } // 訂單實(shí)體繼承基類 publicclass Order extends BaseEntity {     // 業(yè)務(wù)字段... }
      三、進(jìn)階方案:AOP統(tǒng)一處理 3.1 自定義注解

      @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface AutoFill {     OperationType value(); } public enum OperationType {     INSERT,     UPDATE }
      3.2 切面實(shí)現(xiàn)

      @Aspect @Component @Slf4j publicclass AutoFillAspect {          @Autowired     private ObjectMapper objectMapper;     @Around("@annotation(autoFill)")     public Object around(ProceedingJoinPoint pjp, AutoFill autoFill) throws Throwable {         Object[] args = pjp.getArgs();         for (Object arg : args) {             if (arg instanceof BaseEntity) {                 fillFields((BaseEntity) arg, autoFill.value());             }         }         return pjp.proceed(args);     }     private void fillFields(BaseEntity entity, OperationType type) {         String currentUser = getCurrentUser();         LocalDateTime now = LocalDateTime.now();                  if (type == OperationType.INSERT) {             entity.setCreateTime(now);             entity.setCreateUser(currentUser);         }         entity.setUpdateTime(now);         entity.setUpdateUser(currentUser);     }          // 獲取當(dāng)前用戶(支持多線程環(huán)境)     private String getCurrentUser() {         return Optional.ofNullable(RequestContextHolder.getRequestAttributes())                       .map(attrs -> (ServletRequestAttributes) attrs)                       .map(ServletRequestAttributes::getRequest)                       .map(req -> req.getHeader("X-User-Id"))                       .orElse("system");     } }
      四、生產(chǎn)環(huán)境最佳實(shí)踐 4.1 多數(shù)據(jù)源適配

      @Configuration publicclass DataSourceConfig {          @Bean     @ConfigurationProperties("spring.datasource.master")     public DataSource masterDataSource() {         return DataSourceBuilder.create().build();     }          @Bean     public MetaObjectHandler metaObjectHandler() {         returnnew MultiDataSourceAutoFillHandler();     } } publicclass MultiDataSourceAutoFillHandler extends MetaObjectHandler {     // 根據(jù)當(dāng)前數(shù)據(jù)源動(dòng)態(tài)處理 }
      4.2 分布式ID生成

      public class SnowflakeIdGenerator {     // 實(shí)現(xiàn)分布式ID生成 } // 在自動(dòng)填充中集成 @Override public void insertFill(MetaObject metaObject) {     this.strictInsertFill(metaObject, "id", String.class,          idGenerator.nextId()); }
      五、避坑指南:五大常見問題 5.1 空指針異常防護(hù)

      // 使用Optional處理可能為空的情況 private String safeGetUser() {     return Optional.ofNullable(SecurityContextHolder.getContext())                  .map(SecurityContext::getAuthentication)                  .map(Authentication::getPrincipal)                  .map(principal -> {                      if (principal instanceof UserDetails) {                          return ((UserDetails) principal).getUsername();                      }                      return principal.toString();                  })                  .orElse("system"); }
      5.2 字段覆蓋問題

      // 在實(shí)體類中使用@TableField策略 @TableField(fill = FieldFill.INSERT, updateStrategy = FieldStrategy.NEVER) private String createUser;
      六、性能優(yōu)化方案 6.1 緩存當(dāng)前用戶信息

      public class UserContextHolder {     privatestaticfinal ThreadLocal userHolder =  new ThreadLocal<>();          public static void setUser(String user) {         userHolder.set(user);     }          public static String getUser() {         return userHolder.get();     }          public static void clear() {         userHolder.remove();     } } // 在攔截器中設(shè)置 publicclass UserInterceptor implements HandlerInterceptor {     @Override     public boolean preHandle(HttpServletRequest request,                              HttpServletResponse response,                              Object handler) {         UserContextHolder.setUser(request.getHeader("X-User-Id"));         returntrue;     } }
      6.2 批量操作優(yōu)化

      @Transactional public void batchInsert(List orders)  {     // 提前獲取公共字段值     String user = getCurrentUser();     LocalDateTime now = LocalDateTime.now();          orders.forEach(order -> {         order.setCreateTime(now);         order.setCreateUser(user);         order.setUpdateTime(now);         order.setUpdateUser(user);     });          orderMapper.batchInsert(orders); }
      七、監(jiān)控與審計(jì) 7.1 審計(jì)日志集成

      @EntityListeners(AuditingEntityListener.class) public class BaseEntity {     @CreatedBy     private String createUser;          @LastModifiedBy     private String updateUser;          @CreatedDate     private LocalDateTime createTime;          @LastModifiedDate     private LocalDateTime updateTime; }
      7.2 操作日志追蹤

      @Aspect @Component public class OperationLogAspect {          @AfterReturning("@annotation(autoFill)")     public void logOperation(AutoFill autoFill) {         LogEntry log = new LogEntry();         log.setOperator(getCurrentUser());         log.setOperationType(autoFill.value().name());         logService.save(log);     } }

      結(jié)語(yǔ):通過本文的六種方案組合使用,我們?cè)谏a(chǎn)環(huán)境中實(shí)現(xiàn)了:

      • 公共字段維護(hù)代碼量減少90%

      • 相關(guān)Bug率下降75%

      • 新功能開發(fā)效率提升40%

      最佳實(shí)踐清單:

      • 基礎(chǔ)字段使用MyBatis-Plus自動(dòng)填充

      • 復(fù)雜場(chǎng)景結(jié)合AOP處理

      • 分布式環(huán)境集成唯一ID生成

      • 重要操作添加審計(jì)日志

      • 定期檢查字段填充策略

      未來展望:隨著Spring Data JPA的演進(jìn),未來可以探索與Reactive編程的結(jié)合,實(shí)現(xiàn)全鏈路的非阻塞式自動(dòng)填充。

      來源:https://juejin.cn/post/7494549596258189362

      公眾號(hào)“Java精選”所發(fā)表內(nèi)容注明來源的,版權(quán)歸原出處所有(無法查證版權(quán)的或者未注明出處的均來自網(wǎng)絡(luò),系轉(zhuǎn)載,轉(zhuǎn)載的目的在于傳遞更多信息,版權(quán)屬于原作者。如有侵權(quán),請(qǐng)聯(lián)系,筆者會(huì)第一時(shí)間刪除處理!

      最近有很多人問,有沒有讀者交流群!加入方式很簡(jiǎn)單,公眾號(hào)Java精選,回復(fù)“加群”,即可入群!

      文章有幫助的話,點(diǎn)在看,轉(zhuǎn)發(fā)吧!

      特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關(guān)推薦
      熱點(diǎn)推薦
      癌癥去世的人越來越多?醫(yī)生反復(fù)提醒:寧可打打牌,也別做這5事

      癌癥去世的人越來越多?醫(yī)生反復(fù)提醒:寧可打打牌,也別做這5事

      蜉蝣說
      2025-12-19 22:01:31
      我外交部突然發(fā)出警告,如果外媒消息屬實(shí),中日事態(tài)將會(huì)相當(dāng)嚴(yán)重

      我外交部突然發(fā)出警告,如果外媒消息屬實(shí),中日事態(tài)將會(huì)相當(dāng)嚴(yán)重

      影孖看世界
      2025-12-19 19:14:04
      寧波小洛熙尸檢報(bào)告披露,大量?jī)?nèi)幕遠(yuǎn)超想象,法醫(yī)一句話信息量大

      寧波小洛熙尸檢報(bào)告披露,大量?jī)?nèi)幕遠(yuǎn)超想象,法醫(yī)一句話信息量大

      博士觀察
      2025-12-20 22:59:58
      拔“刺”高手,伊薩克對(duì)熱刺打入7球?yàn)橛⒊淖疃?>
    </a>
        <h3>
      <a href=懂球帝
      2025-12-21 03:04:14
      羅素:愚蠢的四大特征

      羅素:愚蠢的四大特征

      尚曦讀史
      2025-12-19 09:55:05
      除了戰(zhàn)敗認(rèn)輸,已經(jīng)無路可走?洪森軍隊(duì)遭重創(chuàng):柬埔寨或爆發(fā)內(nèi)亂

      除了戰(zhàn)敗認(rèn)輸,已經(jīng)無路可走?洪森軍隊(duì)遭重創(chuàng):柬埔寨或爆發(fā)內(nèi)亂

      策前論
      2025-12-20 23:12:53
      柬埔寨電詐分子上演大逃亡,場(chǎng)面震撼!

      柬埔寨電詐分子上演大逃亡,場(chǎng)面震撼!

      環(huán)球熱點(diǎn)快評(píng)
      2025-12-20 07:53:18
      “邪修大法”做家務(wù)就是快!一分錢不花,家里就窗明幾凈~

      “邪修大法”做家務(wù)就是快!一分錢不花,家里就窗明幾凈~

      裝修秀
      2025-12-19 11:30:03
      馬云預(yù)言或?qū)?yīng)驗(yàn)了?未來5年,比開藥店還要暴利的4個(gè)方向

      馬云預(yù)言或?qū)?yīng)驗(yàn)了?未來5年,比開藥店還要暴利的4個(gè)方向

      百態(tài)人間
      2025-12-20 05:25:03
      向高市早苗示好不到24小時(shí),張本底細(xì)被扒,父母的黑歷史也被翻出

      向高市早苗示好不到24小時(shí),張本底細(xì)被扒,父母的黑歷史也被翻出

      天天熱點(diǎn)見聞
      2025-12-20 06:08:30
      民進(jìn)黨支持者竟造謠“嫌犯是大陸籍” 蔣萬(wàn)安駁斥

      民進(jìn)黨支持者竟造謠“嫌犯是大陸籍” 蔣萬(wàn)安駁斥

      看看新聞Knews
      2025-12-21 00:07:04
      55歲鐘麗緹中年發(fā)福太多!胖到180斤 胸大腚圓 滿身肥肉穿吊帶

      55歲鐘麗緹中年發(fā)福太多!胖到180斤 胸大腚圓 滿身肥肉穿吊帶

      廣西阿妹香香
      2025-12-20 15:58:58
      上海一對(duì)情侶戀愛時(shí)男方說“我養(yǎng)你”,分手后女方以此為證,拒絕返還40余萬(wàn)元!測(cè)謊實(shí)驗(yàn)后,法院判了

      上海一對(duì)情侶戀愛時(shí)男方說“我養(yǎng)你”,分手后女方以此為證,拒絕返還40余萬(wàn)元!測(cè)謊實(shí)驗(yàn)后,法院判了

      都市快報(bào)橙柿互動(dòng)
      2025-12-20 09:35:12
      克林頓與愛潑斯坦案受害者共浴照片披露

      克林頓與愛潑斯坦案受害者共浴照片披露

      揚(yáng)子晚報(bào)
      2025-12-20 11:50:57
      快扔掉!戴一天,輻射量相當(dāng)于拍117次胸片

      快扔掉!戴一天,輻射量相當(dāng)于拍117次胸片

      FM93浙江交通之聲
      2025-10-28 00:01:43
      同仁堂集團(tuán)就南極磷蝦油事件致歉:全面開展品牌清理行動(dòng)

      同仁堂集團(tuán)就南極磷蝦油事件致歉:全面開展品牌清理行動(dòng)

      界面新聞
      2025-12-20 09:03:27
      北京阿姨20年守茅臺(tái)股票:90萬(wàn)本金,分紅326萬(wàn),成本歸零!

      北京阿姨20年守茅臺(tái)股票:90萬(wàn)本金,分紅326萬(wàn),成本歸零!

      趣文說娛
      2025-12-20 18:29:20
      歐爾班抨擊歐盟向?yàn)跆峁┵J款,波蘭外長(zhǎng)向歐爾班頒發(fā)列寧勛章

      歐爾班抨擊歐盟向?yàn)跆峁┵J款,波蘭外長(zhǎng)向歐爾班頒發(fā)列寧勛章

      山河路口
      2025-12-20 19:17:58
      歐盟動(dòng)用俄資產(chǎn)的方案未獲通過

      歐盟動(dòng)用俄資產(chǎn)的方案未獲通過

      環(huán)球時(shí)報(bào)國(guó)際
      2025-12-20 09:31:53
      轉(zhuǎn)發(fā)野三坡隧道事故視頻被要求刪除,還有網(wǎng)友稱發(fā)生了爆炸

      轉(zhuǎn)發(fā)野三坡隧道事故視頻被要求刪除,還有網(wǎng)友稱發(fā)生了爆炸

      映射生活的身影
      2025-12-20 19:18:13
      2025-12-21 03:44:49
      Java精選
      Java精選
      一場(chǎng)永遠(yuǎn)也演不完的戲
      1764文章數(shù) 3859關(guān)注度
      往期回顧 全部

      科技要聞

      許四清:具身智能的"ChatGPT時(shí)刻"還未到來

      頭條要聞

      臺(tái)北致4人身亡嫌犯被指是"大陸籍" 蔣萬(wàn)安回應(yīng)

      頭條要聞

      臺(tái)北致4人身亡嫌犯被指是"大陸籍" 蔣萬(wàn)安回應(yīng)

      體育要聞

      我開了20年大巴,現(xiàn)在是一名西甲主帥

      娛樂要聞

      2026央視跨年晚會(huì)陣容曝光,豪華陣仗

      財(cái)經(jīng)要聞

      求解“地方財(cái)政困難”

      汽車要聞

      嵐圖推進(jìn)L3量產(chǎn)測(cè)試 已完成11萬(wàn)公里實(shí)際道路驗(yàn)證

      態(tài)度原創(chuàng)

      藝術(shù)
      家居
      游戲
      房產(chǎn)
      軍事航空

      藝術(shù)要聞

      投資26億!廣州“獨(dú)角獸”的總部大樓,躍出地面!

      家居要聞

      高端私宅 理想隱居圣地

      逆天!LCK頒獎(jiǎng)Faker無緣獎(jiǎng)項(xiàng),LPL解說炮轟開罵直播間差點(diǎn)被封

      房產(chǎn)要聞

      廣州有態(tài)度,一座國(guó)際化社區(qū)給出的城市答案

      軍事要聞

      澤連斯基:前線局勢(shì)愈發(fā)艱難

      無障礙瀏覽 進(jìn)入關(guān)懷版 主站蜘蛛池模板: 精品福利视频一区二区三区| 精品无码人妻一区二区三区| 桃花岛av| 91香蕉国产亚洲一二三区| 亚洲精品欧美二区三区中文字幕| 亚洲成av人片在线观看ww| 宜宾市| 人妻码中文字幕| 茶陵县| 人妻伦理在线一二三区| 亚洲午夜无码av毛片久久 | 国内综合无码| 欧美18videosex性欧美tube1080 | 亚洲熟妇av午夜无码不卡| www.亚洲成人网| 国模少妇无码一区二区三区| 中国免费看的片| 人妻精品久久久久中文字幕青草| 欧美熟妇色XXXx欧美老妇多毛| 好紧好湿太硬了我太爽了视频| 二连浩特市| WWW丫丫国产成人精品| 久久综合色鬼综合色| 亚洲а∨天堂久久精品2021| 日日干日| 亚洲狠狠婷婷综合久久久| 麻豆一区二区三区精品视频| 日韩AV导航| 黄床大片免费30分钟国产精品| b站永久免费看片大全| 人妻 丝袜美腿 中文字幕| 德州市| 欧美国产日韩在线三区| 级毛片内射视频| 久久久久久久久熟女AV| 精品人妻少妇一区二区| 浪卡子县| 一区二区三区免费| 色色热| 无码高潮爽到爆的喷水视频app| 激情六月丁香婷婷四房播|