成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JaVers:一個強大的Java版本控制框架

開發(fā) 架構(gòu)
Javers在做數(shù)據(jù)對比以及數(shù)據(jù)變更追蹤的過程中,提供了豐富的功能,如版本控制、事務(wù)管理、合并沖突和數(shù)據(jù)庫遷移等。同時,JaVers的擴展性也非常好,開發(fā)者可以根據(jù)需要自定義和擴展框架的功能。

JaVers:一個強大的Java版本控制框架

引言

JaVers是一個開源的Java版本控制框架,旨在幫助開發(fā)者更輕松地管理和跟蹤應(yīng)用程序中的對象版本。它提供了一種簡單且強大的方式來處理對象的創(chuàng)建、修改和刪除,以及版本控制和歷史記錄。JaVers適用于各種應(yīng)用程序,包括但不限于Web應(yīng)用程序、桌面應(yīng)用程序和移動應(yīng)用程序。

JaVers使用場景

  • 版本控制:JaVers可以幫助開發(fā)者對應(yīng)用程序中的對象進行版本控制,以便更好地跟蹤和管理對象的修改歷史。
  • 事務(wù)管理:JaVers提供了一個簡單的事務(wù)管理API,可以幫助開發(fā)者在事務(wù)中執(zhí)行操作并處理異常。
  • 合并沖突:當多個開發(fā)者同時對同一對象進行修改時,JaVers可以幫助解決合并沖突,確保數(shù)據(jù)的一致性。
  • 數(shù)據(jù)庫遷移:使用JaVers,開發(fā)者可以輕松地將對象從舊版本遷移到新版本,而無需手動處理復雜的數(shù)據(jù)庫遷移過程。

JaVers優(yōu)缺點

  • 優(yōu)點:
  1. 簡單易用:JaVers框架簡單易用,學習曲線平緩,開發(fā)者可以快速上手。
  2. 強大功能:JaVers提供了豐富的功能,如版本控制、事務(wù)管理、合并沖突和數(shù)據(jù)庫遷移等。
  3. 靈活擴展:JaVers框架具有良好的擴展性,開發(fā)者可以根據(jù)需要自定義和擴展框架的功能。
  4. 社區(qū)活躍:JaVers擁有一個活躍的開源社區(qū),可以為開發(fā)者提供支持和幫助。
  • 缺點:
  1. 技術(shù)門檻高:JaVers框架相對較復雜,需要一定的學習成本。對于初學者來說,可能需要花費較長時間來理解和掌握框架的使用。
  2. 對數(shù)據(jù)庫性能的影響:JaVers在進行版本控制時需要存儲大量的歷史數(shù)據(jù),這可能會對數(shù)據(jù)庫性能產(chǎn)生一定的影響。在處理大量數(shù)據(jù)時,需要注意性能優(yōu)化。
  3. 可能產(chǎn)生大量的數(shù)據(jù)冗余:由于JaVers需要保存對象的完整歷史記錄,因此可能會產(chǎn)生大量的數(shù)據(jù)冗余。對于一些不需要長時間保留歷史記錄的應(yīng)用場景,使用JaVers可能會浪費存儲資源。

JaVers示例代碼

下面是兩個個簡單的JaVers示例代碼,展示了如何使用JaVers實現(xiàn)數(shù)據(jù)比對以及對對象進行版本控制:

首先,需要在項目中引入JaVers的相關(guān)依賴,如果需要對結(jié)果持久化,還需要額外引入對應(yīng)的依賴:

<dependency>
    <groupId>org.javers</groupId>
    <artifactId>javers-core</artifactId>
    <version>7.3.6</version>
</dependency>
<dependency>
    <groupId>org.javers</groupId>
    <artifactId>javers-persistence-sql</artifactId>
    <version>7.3.6</version>
</dependency>
  • Compare

通過JaVers我們可以實現(xiàn)兩個值對象的比較,通過下面的示例可以看到效果:

Person p1 = new Person("1","junly",22);
        Person p2 = new Person("2","rose",22);

        Javers javers = JaversBuilder.javers().build();
        Diff diff = javers.compare(p1, p2);

        if (diff.hasChanges()) {
            Changes changes = diff.getChanges();
            changes.forEach(change->{
                System.out.println(change.toString());
            });
        }

        System.out.println( diff.prettyPrint() );

執(zhí)行上面的代碼,會得到如下的輸出,反映了一個對象修改前后具體屬性進行了怎樣的變化,之前做的數(shù)據(jù)采集的項目中,用戶提交的數(shù)據(jù)是一個大json對象, 由于用戶可以進行多次修改,但又需要記錄每次修改的明細,如果自己寫功能則需要寫大量的代碼來處理,而JaVers可以幫助開發(fā)者完美解決了這類問題。

ValueChange{ property: 'id', left:'1',  right:'2' }
ValueChange{ property: 'name', left:'junly',  right:'rose' }
Diff:
* changes on com.sucl.blog.tool.javers.entity.Person/ :
  - 'id' changed: '1' -> '2'
  - 'name' changed: 'junly' -> 'rose'
  • Commit

通過Commit我們可以實現(xiàn)對對象進行版本控制,通過下面的示例可以看到效果:

public static void main(String[] args) {
        Javers javers = JaversBuilder.javers().build();

        Person p1 = new Person("1","junly",22);
        javers.commit("u1", p1);

        Person p2 = new Person("1","junly",20);
        javers.commit("u1", p2);

        Person p3 = new Person("1","tom",22);
        javers.commit("u1", p3);

        JqlQuery query = QueryBuilder.byInstanceId("1", Person.class).build();

        System.out.println("===========================");
        //
        List<Shadow<Object>> shadows = javers.findShadows(query);
        shadows.forEach(shadow-> System.out.println( shadow.get() ));

        System.out.println("===========================");
        //
        List<CdoSnapshot> snapshots = javers.findSnapshots(query);
        snapshots.forEach(snapshot-> System.out.println( snapshot.getChanged() ));

        System.out.println("===========================");
        //
        Changes changes = javers.findChanges(query);
        changes.forEach(change-> System.out.println( change.toString() ));
}

通過上面的例子,我們可以借用JaVers對對象進行版本控制,并可以獲取到對象歷史數(shù)據(jù)。在實體變化時記錄歷史版本、變更過程以及變化明細。

===========================
Person(id=1, name=tom, age=22)
Person(id=1, name=junly, age=20)
Person(id=1, name=junly, age=22)
===========================
[name, age]
[age]
[name, id, age]
===========================
ValueChange{ property: 'name', left:'junly',  right:'tom' }
ValueChange{ property: 'age', left:'20',  right:'22' }
ValueChange{ property: 'age', left:'22',  right:'20' }
NewObject{ new object: com.sucl.blog.tool.javers.entity.Person/1 }
InitialValueChange{ property: 'id', left:'',  right:'1' }
InitialValueChange{ property: 'name', left:'',  right:'junly' }
InitialValueChange{ property: 'age', left:'',  right:'22' }

Process finished with exit code 0

Shadow和Changes是JaVers提供的兩種查詢方式,通過它們可以獲取到實體的歷史版本。

Snapshot是JaVers提供的一種查詢方式,通過它可以獲取到實體的歷史版本。

JaVers還提供了JQL查詢語言,可以幫助開發(fā)者實現(xiàn)對數(shù)據(jù)庫的各種查詢,比如基于變化的屬性、提交人、時間等等。

JaVers持久化

JaVers提供了兩種持久化方式,一種是內(nèi)存持久化,另一種是數(shù)據(jù)庫持久

目前可以支持的數(shù)據(jù)庫有:

  • H2
  • MySQL
  • PostgreSQL
  • Oracle
  • SQL Server
  • MongoDB

在上面的例子當中,你可以通過配置Repository來實現(xiàn)變更過程的持久化,例如使用Mysql數(shù)據(jù)庫,可以配置如下:

JaversRepository javersRepository = SqlRepositoryBuilder.sqlRepository()
        .withConnectionProvider(()-> getConnection())
        .withDialect(DialectName.MYSQL)
        .build();

Javers javers = JaversBuilder.javers()
        .registerJaversRepository(javersRepository)
        .build();

這樣我們通過JQL查詢就可以按需獲取更多的歷史數(shù)據(jù)了。

結(jié)束語

Javers在做數(shù)據(jù)對比以及數(shù)據(jù)變更追蹤的過程中,提供了豐富的功能,如版本控制、事務(wù)管理、合并沖突和數(shù)據(jù)庫遷移等。同時,JaVers的擴展性也非常好,開發(fā)者可以根據(jù)需要自定義和擴展框架的功能。

責任編輯:武曉燕 來源: Java技術(shù)指北
相關(guān)推薦

2020-06-23 10:03:33

版本控制項目

2015-03-30 12:20:07

DemoStoryboard

2024-02-19 08:26:59

wxPython界面庫開發(fā)

2023-12-01 11:10:13

CMS開源

2020-11-15 18:20:44

GnuCash開源會計軟

2023-10-10 08:22:12

Tesseract庫開源

2021-12-31 10:40:48

JarbootJavaGitHub

2021-03-06 07:00:00

awk文本分析工具Linux

2024-09-06 12:52:59

2024-05-09 08:08:32

SpringBinderJava

2015-09-06 08:57:07

BootstrapCSS框架

2014-11-19 10:12:29

Java分布式緩存

2020-07-15 08:06:04

Node.js框架開發(fā)

2023-01-08 21:05:45

數(shù)據(jù)預警模型

2009-05-08 09:32:27

JavaWeb編程框架

2023-08-08 07:35:54

2009-10-01 09:19:45

PHP框架ZendFramewoCake

2021-06-08 07:32:01

框架Mock測試

2022-03-03 08:02:55

數(shù)據(jù)集成平臺

2023-04-14 08:48:57

AutoGPT工具人工智能
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩一区二区在线视频 | 伊人久久大香线 | 这里只有精品999 | 国产91视频免费 | 欧美成人手机在线 | 天堂中文在线播放 | 亚洲国产精品久久久久婷婷老年 | 成人免费大片黄在线播放 | 四虎精品在线 | 亚洲视频免费在线观看 | 久草新视频 | 精品免费国产一区二区三区 | 日韩精品在线一区 | 日韩国产一区二区三区 | 欧美色综合天天久久综合精品 | 成人国产精品一级毛片视频毛片 | 青青草这里只有精品 | 亚洲成人免费在线观看 | 国产精品一区二区av | 成人免费大片黄在线播放 | 欧美精品99 | 日韩精品无码一区二区三区 | 欧美久久大片 | 亚洲视频免费观看 | 日韩不卡一区二区三区 | 欧美日韩中文字幕 | 亚洲最大的黄色网址 | 国产精品久久久久久久久久久新郎 | 一级黄色片免费 | 91精品国产91久久久久游泳池 | 日韩a视频 | 新疆少妇videos高潮 | 国产精彩视频一区 | 成人激情视频网 | 久久亚洲一区 | 波多野结衣中文字幕一区二区三区 | 国产激情 | 日本精品视频一区二区三区四区 | 国产精品99久久久久久久久 | 欧美电影网 | 成人精品视频在线观看 |