精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

公共字段自動填充的六種神技,開發效率翻倍!

開發 前端
本文將分享一套經過生產驗證的自動化方案,涵蓋MyBatis-Plus、AOP、JWT等六種核心策略,助你徹底擺脫公共字段維護的煩惱。

在開發外賣系統訂單模塊時,我發現每個實體類都包含create_time、update_by等重復字段。手動維護這些字段不僅效率低下,還容易出錯。

本文將分享一套經過生產驗證的自動化方案,涵蓋MyBatis-Plus、AOP、JWT等六種核心策略,助你徹底擺脫公共字段維護的煩惱。

一、痛點分析:公共字段維護的三大困境

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);
}

痛點總結:

  • 代碼重復率高(每個Service方法都要設置)
  • 維護成本高(字段變更需修改多處)
  • 容易遺漏(特別是更新操作)

二、基礎方案:MyBatis-Plus自動填充

2.1 配置元對象處理器
@Slf4j
@Component
publicclassAutoFillHandlerimplementsMetaObjectHandler{
    
    // 插入時自動填充
    @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");
    }
}
2.2 實體類注解配置
@Data
publicclassBaseEntity{
    @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;
}

// 訂單實體繼承基類
publicclassOrderextendsBaseEntity{
    // 業務字段...
}

三、進階方案:AOP統一處理

3.1 自定義注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public@interface AutoFill {
    OperationType value();
}

publicenum OperationType {
    INSERT,
    UPDATE
}
3.2 切面實現
@Aspect
@Component
@Slf4j
publicclassAutoFillAspect{
    
    @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);
    }

    privatevoidfillFields(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);
    }
    
    // 獲取當前用戶(支持多線程環境)
    private String getCurrentUser(){
        return Optional.ofNullable(RequestContextHolder.getRequestAttributes())
                      .map(attrs -> (ServletRequestAttributes) attrs)
                      .map(ServletRequestAttributes::getRequest)
                      .map(req -> req.getHeader("X-User-Id"))
                      .orElse("system");
    }
}

四、生產環境最佳實踐

4.1 多數據源適配
@Configuration
publicclassDataSourceConfig{
    
    @Bean
    @ConfigurationProperties("spring.datasource.master")
    public DataSource masterDataSource(){
        return DataSourceBuilder.create().build();
    }
    
    @Bean
    public MetaObjectHandler metaObjectHandler(){
        returnnew MultiDataSourceAutoFillHandler();
    }
}

publicclassMultiDataSourceAutoFillHandlerextendsMetaObjectHandler{
    // 根據當前數據源動態處理
}
4.2 分布式ID生成
publicclassSnowflakeIdGenerator{
    // 實現分布式ID生成
}

// 在自動填充中集成
@Override
publicvoidinsertFill(MetaObject metaObject){
    this.strictInsertFill(metaObject, "id", String.class, 
        idGenerator.nextId());
}

五、避坑指南:五大常見問題

5.1 空指針異常防護
// 使用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 字段覆蓋問題
// 在實體類中使用@TableField策略
@TableField(fill = FieldFill.INSERT, updateStrategy = FieldStrategy.NEVER)
private String createUser;

六、性能優化方案

6.1 緩存當前用戶信息
publicclassUserContextHolder{
    privatestaticfinal ThreadLocal<String> userHolder = new ThreadLocal<>();
    
    publicstaticvoidsetUser(String user){
        userHolder.set(user);
    }
    
    publicstatic String getUser(){
        return userHolder.get();
    }
    
    publicstaticvoidclear(){
        userHolder.remove();
    }
}

// 在攔截器中設置
publicclassUserInterceptorimplementsHandlerInterceptor{
    @Override
    publicbooleanpreHandle(HttpServletRequest request, 
                            HttpServletResponse response, 
                            Object handler){
        UserContextHolder.setUser(request.getHeader("X-User-Id"));
        returntrue;
    }
}
6.2 批量操作優化
@Transactional
publicvoidbatchInsert(List<Order> 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);
}

七、監控與審計

7.1 審計日志集成
@EntityListeners(AuditingEntityListener.class)
publicclassBaseEntity{
    @CreatedBy
    private String createUser;
    
    @LastModifiedBy
    private String updateUser;
    
    @CreatedDate
    private LocalDateTime createTime;
    
    @LastModifiedDate
    private LocalDateTime updateTime;
}
7.2 操作日志追蹤
@Aspect
@Component
publicclassOperationLogAspect{
    
    @AfterReturning("@annotation(autoFill)")
    publicvoidlogOperation(AutoFill autoFill){
        LogEntry log = new LogEntry();
        log.setOperator(getCurrentUser());
        log.setOperationType(autoFill.value().name());
        logService.save(log);
    }
}

結語: 通過本文的六種方案組合使用,我們在生產環境中實現了:

  • 公共字段維護代碼量減少90%
  • 相關Bug率下降75%
  • 新功能開發效率提升40%

最佳實踐清單:

  • 基礎字段使用MyBatis-Plus自動填充
  • 復雜場景結合AOP處理
  • 分布式環境集成唯一ID生成
  • 重要操作添加審計日志
  • 定期檢查字段填充策略

未來展望: 隨著Spring Data JPA的演進,未來可以探索與Reactive編程的結合,實現全鏈路的非阻塞式自動填充。

責任編輯:武曉燕 來源: 碼猿技術專欄
相關推薦

2025-05-29 03:00:00

2025-06-05 01:00:00

2020-09-21 08:32:03

JavaSQL公共字段

2024-09-06 08:02:52

2023-12-06 18:21:12

編程語言AI開發AI

2017-06-26 10:35:58

前端JavaScript繼承方式

2023-07-04 08:19:25

IDEA插件

2011-06-07 09:36:18

2016-01-15 17:36:29

云計算云應用

2012-10-15 13:26:31

云計算架構

2025-02-27 00:00:30

SpringJava方式

2025-07-08 08:20:39

2022-12-06 10:39:43

Spring事務失效

2025-05-06 00:00:05

MySQLES協同

2011-02-24 10:56:34

人才

2022-05-12 09:02:50

編程語言PythonJava

2022-05-08 22:09:28

網絡拓撲網絡技術網絡

2025-05-19 00:02:00

數據脫敏加密算法數據庫

2023-09-06 11:35:11

2018-04-27 15:02:10

點贊
收藏

51CTO技術棧公眾號

aaa级精品久久久国产片| 中文字幕日韩av资源站| 91国内揄拍国内精品对白| 西西大胆午夜视频| 色成人免费网站| 一区二区三区中文字幕精品精品| 国产一区二区三区高清视频| 潘金莲一级淫片aaaaaa播放| 98精品视频| 精品爽片免费看久久| 小泽玛利亚视频在线观看| 欧洲中文在线| 国产欧美日韩精品a在线观看| 亚洲一区二区三区777| 国产精品乱子伦| 亚洲精品一区二区妖精| 亚洲日本欧美中文幕| 亚洲三级在线视频| 制服诱惑亚洲| 性感美女极品91精品| 吴梦梦av在线| 国产大学生校花援交在线播放| 国产99久久久国产精品潘金网站| 国产精品精品国产| 在线观看精品国产| 国产精品草草| 欧美xxxx做受欧美| 午夜激情福利电影| 久久爱www成人| 亚洲精品91美女久久久久久久| 中文字幕第一页在线视频| 日本久久免费| 秋霞一区二区| 一区二区三区四区在线播放| 日韩一区不卡| 水中色av综合| 波多野结衣中文字幕一区| 亚洲影院在线看| 亚洲天堂狠狠干| 日韩不卡一二三区| 日韩免费观看高清| 中文字幕一区在线播放| 极品中文字幕一区| 九九久久久久久久久激情| 国产精品1区2区3区4区| 精品99在线| 亚洲色图激情小说| 四虎国产精品成人免费入口| 亚洲另类春色校园小说| 亚洲第一视频在线观看| 91成人在线观看喷潮蘑菇| 欧美高清hd| 日韩欧美国产小视频| 亚洲国产天堂久久综合网| 日本在线xxx| 国产精品原创| 福利视频导航一区| 欧美日韩在线中文| 免费电影日韩网站| 欧美在线一二三四区| 日日碰狠狠躁久久躁婷婷| 毛片无码国产| 在线亚洲精品福利网址导航| 热久久精品国产| 欧美色网一区| 在线免费不卡视频| 男人插女人下面免费视频| 日韩精品一区二区三区| 欧美中文字幕一区| 五月婷婷之婷婷| 国产一区二区高清在线| 欧美大片一区二区三区| 日本wwwwwww| 奇米777国产一区国产二区| 国产视频精品va久久久久久| 亚洲性猛交xxxx乱大交| 日韩精品看片| 久久亚洲电影天堂| 亚洲国产综合久久| 欧美亚洲视频| 国产欧美 在线欧美| 国产日韩免费视频| 99re66热这里只有精品3直播| 久久精品第九区免费观看| 大乳在线免费观看| 亚洲精品国产视频| 欧美 国产 日本| 欧美爱爱视频| 精品动漫一区二区三区在线观看| 李宗瑞91在线正在播放| 欧美电影一二区| 久久久久久久久爱| 欧美日韩在线视频播放| 国产盗摄女厕一区二区三区| 国模精品一区二区三区| 97超碰国产一区二区三区| 伊人色综合久久天天人手人婷| 男女激情免费视频| 69堂免费精品视频在线播放| 欧美一区三区四区| av无码av天天av天天爽| 欧美第十八页| 日韩免费观看视频| 丰满人妻一区二区三区免费视频| 国产午夜精品久久久久久久 | 国产情侣在线播放| 91蝌蚪国产九色| 成人性做爰片免费视频| 韩国成人动漫| 精品国产a毛片| 国产高清视频免费在线观看| 亚洲免费婷婷| 成人动漫视频在线观看免费| 浮生影视网在线观看免费| 亚洲国产日韩a在线播放| jizzzz日本| 蜜桃精品噜噜噜成人av| 欧美国产日本高清在线 | 免费看一级黄色| 亚洲人成毛片在线播放女女| 91九色在线视频| 国产综合在线观看| 亚洲成人久久影院| 色哟哟免费视频| 婷婷亚洲综合| 国产精品电影网站| 手机福利在线| 午夜亚洲福利老司机| 九色91porny| 欧美hd在线| 国产欧美日韩精品丝袜高跟鞋| 人成在线免费视频| 午夜精品国产更新| 婷婷五月精品中文字幕| 国产精品多人| 肥熟一91porny丨九色丨| 91最新在线视频| 在线不卡一区二区| 免费精品在线视频| 精品一区二区三区蜜桃| 一区二区国产日产| 99久久婷婷国产综合精品首页| 亚洲视频在线观看视频| 最新中文字幕一区| 久久美女高清视频| 欧美少妇性生活视频| 欧洲亚洲一区二区三区| 欧美亚洲在线播放| 飘雪影视在线观看免费观看| 欧美日韩国产在线播放| 韩国无码一区二区三区精品| 国产欧美高清| 欧美精品二区三区四区免费看视频| 久草在线中文最新视频| 亚洲精品电影在线| 国内自拍视频在线播放| 久久久久9999亚洲精品| 国产视频在线视频| jizzjizz欧美69巨大| 国产精品第一视频| 黄色小网站在线观看| 日韩午夜在线影院| 欧美成人黄色网| 成人精品视频网站| 国产l精品国产亚洲区久久| 蜜桃一区二区三区| 国产精品永久免费在线| bestiality新另类大全| 亚洲第一精品夜夜躁人人爽 | 在线观看成人免费视频| 三级影片在线观看| 国产成人在线观看免费网站| 成年人看的毛片| 欧美猛男男男激情videos| 国产女人精品视频| 久久av色综合| 亚洲欧美成人网| 91国偷自产中文字幕久久| 亚洲免费成人av| 久久久久成人精品无码中文字幕| 翔田千里一区二区| 亚洲蜜桃av| 风间由美一区二区av101| 911国产网站尤物在线观看| 国产51人人成人人人人爽色哟哟| 欧美精品精品一区| 日韩污视频在线观看| 欧美韩国日本不卡| 亚洲成a人片在线www| 美女久久网站| 蜜桃视频一区二区在线观看| 亚洲欧洲免费| 亚洲最大av网站| 奇米777日韩| 欧美国产亚洲视频| 成年人视频免费在线观看| 欧美成人综合网站| 无码任你躁久久久久久久| 中文字幕欧美一| 日韩成人av一区二区| 久久精品999| 国产一区二区三区精彩视频| 婷婷久久国产对白刺激五月99| 九九99久久| 日韩精品一区二区三区中文字幕| 国产精品福利网| а√天堂资源官网在线资源| 精品国产一区二区三区在线观看| 黄色一级a毛片| 欧美日韩国产乱码电影| 日韩视频在线观看一区| 亚洲精品一二三区| 久久视频精品在线观看| 99综合电影在线视频| 久久婷婷中文字幕| 日韩高清不卡一区二区三区| 人妻av中文系列| 欧美精品自拍| 一区二区冒白浆视频| 免费国产自久久久久三四区久久| 国产精品一区二区欧美黑人喷潮水| 国产亚洲人成a在线v网站| 欧美在线欧美在线| wwwww亚洲| 欧美精品做受xxx性少妇| 调教视频免费在线观看| 国产亚洲视频在线| 免费一级在线观看| 亚洲乱码国产乱码精品精天堂| 成 人片 黄 色 大 片| 欧美精品在线观看播放| 涩涩视频在线观看| 欧洲精品视频在线观看| 日韩欧美在线观看免费| 亚洲va欧美va人人爽| 久久久久久免费观看| 亚洲精品网站在线观看| 国产天堂av在线| 国产精品美女久久久久aⅴ国产馆| 欧美多人猛交狂配| 97se亚洲国产综合自在线观| 又大又长粗又爽又黄少妇视频| 精品一区二区久久| 激情五月婷婷基地| 国内外成人在线视频| 国内自拍视频网| 日本欧美在线观看| 九九热99视频| 国产一区二区视频在线播放| 欧美视频国产视频| 国产风韵犹存在线视精品| 日本xxxx免费| 成人久久18免费网站麻豆| 国产高潮视频在线观看| 成人午夜伦理影院| 亚洲久久久久久| 久久久影院官网| 人妻视频一区二区| 国产精品看片你懂得| 久久精品一区二区三区四区五区| 成人欧美一区二区三区白人| 老湿机69福利| 亚洲电影一级黄| 影音先锋在线国产| 欧美日韩亚洲综合在线| 国产精品呻吟久久| 欧美va在线播放| 四虎国产精品永远| 国产亚洲一区精品| yellow91字幕网在线| 欧美精品久久久久a| 涩涩在线视频| 国产精品最新在线观看| 免费一级欧美在线大片| 国内一区二区三区在线视频| 国产成人黄色| dy888午夜| av不卡在线| 国产又大又黄又粗的视频| 韩日av一区二区| 久久久久久婷婷| 国产精品三级av在线播放| 极品久久久久久| 一本一本大道香蕉久在线精品| 亚洲无码精品在线观看| 精品久久久久一区二区国产| 日本又骚又刺激的视频在线观看| 日韩最新av在线| yellow在线观看网址| 国产精品视频99| 国产精品白浆| 亚洲精品一品区二品区三品区| 激情综合激情| jizz欧美性11| 91免费看视频| 少妇久久久久久被弄高潮| 欧美视频在线免费| 国产黄色一级大片| 夜夜嗨av一区二区三区免费区 | 中国黄色片一级| 99这里只有精品| 黄色一级片在线免费观看| 欧美综合亚洲图片综合区| 丰满人妻av一区二区三区| 精品国产一区二区三区久久| 国产免费不卡| 国产伦精品一区二区三区照片91| 久久在线视频| 欧美韩国日本在线| 国产成人在线看| www.av免费| 欧美日韩一区二区三区高清| 天天操天天操天天干| 欧美成人合集magnet| 福利一区二区三区视频在线观看| 国精产品一区二区| 国产一区二区三区自拍| 在线一区二区不卡| 国产精品少妇自拍| 无码人妻丰满熟妇区五十路 | 日本韩国精品在线| 日本激情一区二区| 欧美日韩成人在线视频| 国产精品国产亚洲精品| 亚洲免费不卡| 奇米四色…亚洲| 人妻一区二区视频| 一本色道久久综合精品竹菊| 天堂中文字幕av| 久久久这里只有精品视频| 日韩一区二区三区精品视频第3页 日韩一区二区三区精品 | 久久久国产91| 亚洲一区二区av| 中文字幕在线观看一区二区三区| 日韩电影一区二区三区| 亚洲精品午夜视频| 色天使色偷偷av一区二区| 天堂中文在线资| 欧美有码在线视频| 亚洲精品国产动漫| 午夜肉伦伦影院| 久久免费的精品国产v∧| 久久中文字幕免费| 亚洲一区二区久久久| 青青热久免费精品视频在线18| 日本在线高清视频一区| 日韩激情一区二区| 日韩黄色中文字幕| 欧美精品一二三四| 超碰在线网址| 国产精品12| 国产精品日本| 91l九色lporny| 欧美图区在线视频| 久久77777| 动漫美女被爆操久久久| 亚洲另类自拍| 日本黄色网址大全| 欧洲色大大久久| 国产成人无吗| 豆国产97在线| 亚洲永久免费精品| a级在线免费观看| 7777女厕盗摄久久久| 青草影视电视剧免费播放在线观看| 国产精品久久久久久久天堂第1集 国产精品久久久久久久免费大片 国产精品久久久久久久久婷婷 | 在线免费播放av| 一本大道久久精品懂色aⅴ| 黄色片免费在线| 国产欧美精品va在线观看| 午夜亚洲福利| 不卡一区二区在线观看| 欧美日韩中文字幕一区| 成人国产免费电影| 黑人中文字幕一区二区三区| 久久综合导航| 久久久精品视频免费观看| 亚洲黄页网在线观看| a成人v在线| 人妻激情另类乱人伦人妻| 久久奇米777| 国产女同91疯狂高潮互磨| 777国产偷窥盗摄精品视频| 欧美亚洲国产激情| 一个人看的视频www| 色综合久久久久综合体| 成人免费网址| 欧美久久电影| 国产黑丝在线一区二区三区| 午夜婷婷在线观看| 久久天天躁狠狠躁夜夜躁| 日韩精品导航| 一本之道在线视频| 色婷婷av一区二区三区之一色屋| 国产黄大片在线观看画质优化| 精品综合在线| 国产成人av电影在线| 最近中文字幕在线观看| 国内精品久久久久久影视8| 日韩欧美高清在线播放|