1. 程式人生 > >冗餘欄位更新/填充框架rdt-v2

冗餘欄位更新/填充框架rdt-v2

rdt-v2

rdt-v2是一款基於註解構建完成後的關係更新/填充實體欄位的框架,用於管理冗餘欄位關係,進行批量更新或自動填充資料關係,避免重複編寫多次邏輯程式碼的操作

專案地址: 直達

特性:

使用簡單,依賴性低
完成java bean類資料關係的維護
基於條件註解和依賴欄位註解,通過條件標識對應持久化類中唯一資料
對資料操作層進行抽象,可根據具體場景自行實現/覆蓋資料層資料的操作方法
基於方法可定製化,均可覆蓋大部分所提供解析的方法
支援持久化資料相關的冗餘資料更新
支援vo,dto,pojo等的資料列表填充(提供多組引數值配置,適用性高,並對傳入的資料進行條件分類,減少資料層的操作次數)

注意事項

關於欄位的註解僅支援在欄位上配置
合理利用欄位transient特性,以提升效能(可避免框架中不必要的邏輯處理)
RdtResolver可配置提供外的註解,包含全域性持久化類註解,id註解,transient註解,建議提供toJson方法的支援
建議唯一性資料標識不存在重複

如何引用

請自行根據需要打包所依賴jar,rdt-core及rdt-annotation作為核心jar
rdt-jpa及rdt-spring-mongodb為已提供的資料層操作實現,可作為具體使用框架實現的參考

註解介紹: 詳情

api介紹: 詳情

使用配置:

//屬性配置類
public RdtProperties rdtProperties() {
    RdtProperties properties = new RdtProperties();
    //讀取class所在的包; 支援,分割
    properties.setBasePackage(basePackage);
    //是否通過saveAll儲存
    properties.setComplexBySaveAll(false);
    return properties;
}
//框架依賴於該物件的功能解析,可覆蓋相應實現方法
public RdtResolver rdtResolver() {
    return new RdtResolver() {
        
        //base class註解類,用於解析為存在的持久化實體類,預設包含提供的@RdtBaseEntity
        @Override
        protected Class<?>[] customBaseEntityAnnotations() {
            return new Class[] {Document.class};
        }

        @Override
        protected boolean isBaseClassByAnalysis(Class entityClass) {
            return false;
        }

        @Override
        protected String getColumnNameByAnalysis(Class<?> entityClass, Field field) {
            return null;
        }

        @Override
        protected String getEntityNameByAnalysis(Class<?> entityClass) {
            return null;
        }

        //class類的id,預設提供@RdtId(僅作為讀取當前類中的id屬性欄位)
        @Override
        protected Class<?>[] primaryIdAnnotations() {
            return new Class[]{Id.class};
        }

        @Override
        protected String getPrimaryIdByAnalysis(Class aClass, Field field) {
            return null;
        }
        
        //transient註解,用於設定對應欄位列屬性
        @Override
        protected Class<?>[] columnTransientAnnotations() {
            return new Class[] {Transient.class};
        }
        
        //log中輸出json文字的依賴方法
        @Override
        public String toJson(Object o) {
            //return SerializationUtils.serializeToJsonSafely(o);
            return JSON.toJSONString(o);
        }
    };
}

//作為讀取配置的物件
public RdtSupport rdtSupport() {
    return rdtProperties().builder(rdtResolver());
}

//持久層操作物件
public RdtOperation mongoRdtOperation() {
    MongoRdtOperation operation = new MongoRdtOperation(rdtSupport()) {
    };
    operation.setMongoTemplate(mongoTemplate);
    return operation;
}