日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

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

來源: 責編: 時間:2023-12-17 15:03:53 282觀看
導讀JaVers:一個強大的Java版本控制框架引言JaVers是一個開源的Java版本控制框架,旨在幫助開發者更輕松地管理和跟蹤應用程序中的對象版本。它提供了一種簡單且強大的方式來處理對象的創建、修改和刪除,以及版本控制和歷史記

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

引言

JaVers是一個開源的Java版本控制框架,旨在幫助開發者更輕松地管理和跟蹤應用程序中的對象版本。它提供了一種簡單且強大的方式來處理對象的創建、修改和刪除,以及版本控制和歷史記錄。JaVers適用于各種應用程序,包括但不限于Web應用程序、桌面應用程序和移動應用程序。JXt28資訊網——每日最新資訊28at.com

JaVers使用場景

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

JaVers優缺點

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

JaVers示例代碼

下面是兩個個簡單的JaVers示例代碼,展示了如何使用JaVers實現數據比對以及對對象進行版本控制:JXt28資訊網——每日最新資訊28at.com

首先,需要在項目中引入JaVers的相關依賴,如果需要對結果持久化,還需要額外引入對應的依賴:JXt28資訊網——每日最新資訊28at.com

<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我們可以實現兩個值對象的比較,通過下面的示例可以看到效果:JXt28資訊網——每日最新資訊28at.com

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

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

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我們可以實現對對象進行版本控制,通過下面的示例可以看到效果:JXt28資訊網——每日最新資訊28at.com

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對對象進行版本控制,并可以獲取到對象歷史數據。在實體變化時記錄歷史版本、變更過程以及變化明細。JXt28資訊網——每日最新資訊28at.com

===========================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提供的兩種查詢方式,通過它們可以獲取到實體的歷史版本。JXt28資訊網——每日最新資訊28at.com

Snapshot是JaVers提供的一種查詢方式,通過它可以獲取到實體的歷史版本。JXt28資訊網——每日最新資訊28at.com

JaVers還提供了JQL查詢語言,可以幫助開發者實現對數據庫的各種查詢,比如基于變化的屬性、提交人、時間等等。JXt28資訊網——每日最新資訊28at.com

JaVers持久化

JaVers提供了兩種持久化方式,一種是內存持久化,另一種是數據庫持久JXt28資訊網——每日最新資訊28at.com

目前可以支持的數據庫有:JXt28資訊網——每日最新資訊28at.com

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

在上面的例子當中,你可以通過配置Repository來實現變更過程的持久化,例如使用Mysql數據庫,可以配置如下:JXt28資訊網——每日最新資訊28at.com

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

這樣我們通過JQL查詢就可以按需獲取更多的歷史數據了。JXt28資訊網——每日最新資訊28at.com

結束語

Javers在做數據對比以及數據變更追蹤的過程中,提供了豐富的功能,如版本控制、事務管理、合并沖突和數據庫遷移等。同時,JaVers的擴展性也非常好,開發者可以根據需要自定義和擴展框架的功能。JXt28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-47735-0.htmlJaVers:一個強大的Java版本控制框架

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 寫作 0.1 秒,畫圖 2.6 秒,寧暢服務器就是這么絲滑

下一篇: 利用Python的元類自己動手寫一個簡單的ORM

標簽:
  • 熱門焦點
  • 7月安卓手機性價比榜:努比亞+紅魔兩款新機入榜

    7月登場的新機有努比亞Z50S Pro和紅魔8S Pro,除了三星之外目前唯二的兩款搭載超頻版驍龍8Gen2處理器的產品,而且努比亞和紅魔也一貫有著不錯的性價比,所以在本次的性價比榜單
  • 帥氣純真少年!日本最帥初中生選美冠軍出爐

    日本第一帥哥初一生選美大賽冠軍現已正式出爐,冠軍是來自千葉縣的宗田悠良。日本一直熱衷于各種選美大賽,從&ldquo;最美JK&rdquo;起到&ldquo;最美女星&r
  • 分布式系統中的CAP理論,面試必問,你理解了嘛?

    對于剛剛接觸分布式系統的小伙伴們來說,一提起分布式系統,就感覺高大上,深不可測。而且看了很多書和視頻還是一臉懵逼。這篇文章主要使用大白話的方式,帶你理解一下分布式系統
  • 三言兩語說透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是兩種很有用的技術,可以幫助我們寫出更加優雅、泛用的函數。本文將首先介紹柯里化和反柯里化的概念、實現原理和應用
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人員可能會涉及各種各樣的安全任務,包括但不限于:開發某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
  • 騰訊VS網易,最卷游戲暑期檔,誰能笑到最后?

    作者:無銹缽來源:財經無忌7月16日晚,上海1862時尚藝術中心。伴隨著幻象的精準命中,碩大的熒幕之上,比分被定格在了14:12,被寄予厚望的EDG戰隊以絕對的優勢戰勝了BLG戰隊,拿下了總決
  • 英特爾Xe-HP項目終止,將專注Xe-HPC/HPG系列顯卡

    據10 月 31 日消息報道,英特爾高級副總裁兼加速計算系統和圖形事業部總經理 表示,Xe-HP“ Arctic Sound” 系列服務器 GPU 已經應用于 oneAPI devcloud 云服
  • SN570 NVMe SSD固態硬盤 價格與性能兼具

    SN570 NVMe SSD固態硬盤是西部數據發布的最新一代WD Blue系列的固態硬盤,不僅閃存技術更為精進,性能也得到了進一步的躍升。WD Blue SN570 NVMe SSD的包裝外
  • 電博會與軟博會實現"線下+云端"的雙線融合

    在本次“電博會”與“軟博會”雙展會利好條件的加持下,既可以發揮展會拉動人流、信息流、資金流實現快速交互流動的作用,繼而推動區域經濟良性發展;又可以聚
Top 主站蜘蛛池模板: 沈丘县| 景德镇市| 临沧市| 东兰县| 焦作市| 新化县| 伊春市| 南和县| 当雄县| 峡江县| 手游| 林州市| 怀柔区| 淅川县| 南宫市| 永兴县| 芷江| 池州市| 广元市| 葵青区| 威宁| 姚安县| 晋州市| 佳木斯市| 广丰县| 平原县| 宣恩县| 郸城县| 石台县| 收藏| 蓝田县| 海口市| 来宾市| 唐山市| 碌曲县| 菏泽市| 沙湾县| 赣榆县| 格尔木市| 淳安县| 古丈县|