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

JaVers:一個強(qiáng)大的Java版本控制框架

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

JaVers:一個強(qiáng)大的Java版本控制框架

引言

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

JaVers使用場景

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

JaVers優(yōu)缺點

  • 優(yōu)點:
  1. 簡單易用:JaVers框架簡單易用,學(xué)習(xí)曲線平緩,開發(fā)者可以快速上手。
  2. 強(qiáng)大功能:JaVers提供了豐富的功能,如版本控制、事務(wù)管理、合并沖突和數(shù)據(jù)庫遷移等。
  3. 靈活擴(kuò)展:JaVers框架具有良好的擴(kuò)展性,開發(fā)者可以根據(jù)需要自定義和擴(kuò)展框架的功能。
  4. 社區(qū)活躍:JaVers擁有一個活躍的開源社區(qū),可以為開發(fā)者提供支持和幫助。
  • 缺點:
  1. 技術(shù)門檻高:JaVers框架相對較復(fù)雜,需要一定的學(xué)習(xí)成本。對于初學(xué)者來說,可能需要花費較長時間來理解和掌握框架的使用。
  2. 對數(shù)據(jù)庫性能的影響:JaVers在進(jìn)行版本控制時需要存儲大量的歷史數(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ù)比對以及對對象進(jìn)行版本控制:

首先,需要在項目中引入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í)行上面的代碼,會得到如下的輸出,反映了一個對象修改前后具體屬性進(jìn)行了怎樣的變化,之前做的數(shù)據(jù)采集的項目中,用戶提交的數(shù)據(jù)是一個大json對象, 由于用戶可以進(jìn)行多次修改,但又需要記錄每次修改的明細(xì),如果自己寫功能則需要寫大量的代碼來處理,而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)對對象進(jì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對對象進(jìn)行版本控制,并可以獲取到對象歷史數(shù)據(jù)。在實體變化時記錄歷史版本、變更過程以及變化明細(xì)。

===========================
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

在上面的例子當(dāng)中,你可以通過配置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的擴(kuò)展性也非常好,開發(fā)者可以根據(jù)需要自定義和擴(kuò)展框架的功能。

責(zé)任編輯:武曉燕 來源: 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開源會計軟

2021-12-31 10:40:48

JarbootJavaGitHub

2023-10-10 08:22:12

Tesseract庫開源

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分布式緩存

2023-01-08 21:05:45

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

2020-07-15 08:06:04

Node.js框架開發(fā)

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ù)棧公眾號

国产成人手机在线| 欧美色大人视频| 精品盗摄一区二区三区| 国产www免费| 91久久精品国产91性色69 | 欧美激情在线一区二区| 日韩在线播放av| 激情图片中文字幕| 午夜激情在线| 精品一区精品二区高清| 久久久精品在线观看| 黄网站色视频免费观看| 亚洲av永久无码国产精品久久| 国产精品久久久久久久免费软件| 中文字幕日韩有码| 欧美不卡在线播放| 手机福利在线| 九九热在线免费观看| 午夜视频免费在线| 精品影院一区二区久久久| 久久久亚洲欧洲日产国码aⅴ| 亚洲av综合一区二区| 竹内纱里奈兽皇系列在线观看| 国产精品污网站| 日韩在线视频线视频免费网站| 日本黄色www| 欧美xoxoxo| 中文字幕色av一区二区三区| 国产在线精品一区二区中文 | 国产精品av在线播放| 免费看黄色的视频| 高清一区二区三区av| 亚洲综合视频网| 亚洲美女网站18| 国产免费的av| 99久久精品网站| 日韩午夜中文字幕| 最新中文字幕免费视频| 五月天av在线| 亚洲欧洲综合另类在线| 久久久99国产精品免费| 三级在线视频观看| 五月天色婷婷丁香| 国产精品久久免费视频| 色老汉一区二区三区| 东北少妇不带套对白| 国产福利在线播放麻豆| 久久久五月婷婷| 26uuu国产精品视频| 久久精品视频久久| 精品一区毛片| 亚洲欧美精品一区| 中文字幕av一区二区三区人妻少妇| 三上悠亚国产精品一区二区三区| 五月婷婷综合网| youjizz.com亚洲| 精品三级久久久久久久电影聊斋| www.亚洲精品| 国产亚洲精品美女久久久m| 国产精品久久影视| 蜜臀精品久久久久久蜜臀| 日本高清+成人网在线观看| 久久免费少妇高潮99精品| 偷拍欧美精品| 亚洲性xxxx| 午夜免费福利影院| 亚洲成人影音| 精品国产免费视频| 东京热av一区| 欧美人体视频| 欧美mv和日韩mv的网站| 国产精品99久久久精品无码| 91精品美女| 欧美日韩美女一区二区| 亚洲美女激情视频| 激情五月婷婷六月| 理论片午午伦夜理片在线播放| 国产精品久久久久桃色tv| 亚洲 国产 日韩 综合一区| 国产香蕉视频在线看| www成人在线观看| 看欧美日韩国产| 亚洲av成人无码网天堂| www一区二区| 天天综合狠狠精品| av中文字幕在线观看| 亚洲高清免费在线| av高清在线免费观看| 亚洲欧美一区二区三区| 在线视频一区二区免费| 孩娇小videos精品| 视频在线观看免费影院欧美meiju| 日韩欧美国产综合| 国产一级二级在线观看| 九九精品久久| 久久久成人av| 久久中文字幕无码| 日韩在线观看一区二区| 水蜜桃久久夜色精品一区的特点 | 成人av免费在线观看| 精品一区二区久久久久久久网站| 久久久久久青草| 国产精品久久久久久妇女6080| 中文字幕在线中文| 都市激情亚洲综合| 欧美色视频在线观看| 在线播放第一页| 成人三级av在线| 亚洲午夜精品久久久久久性色 | 久久成人av网站| 永久免费看片在线播放| 久久国产尿小便嘘嘘| 国产精品免费一区二区三区四区| 色综合888| 中文字幕一区二区三区乱码在线| 日韩黄色短视频| 91高清视频在线观看| 欧美视频你懂的| 性久久久久久久久久久| 日韩情爱电影在线观看| 97视频在线免费观看| 国产乱码精品一区二三区蜜臂| 91视频在线观看免费| 伊人网在线免费| 日本精品裸体写真集在线观看| 91精品一区二区三区在线观看| 欧美极品jizzhd欧美仙踪林| 国产精品国产一区| 日韩av免费在线| 农村少妇久久久久久久| 亚洲欧美日韩成人高清在线一区| 日批视频在线免费看| 中文字幕一区二区三区中文字幕| 免费成人高清在线视频theav| 日韩国产欧美精品一区二区三区| chinese全程对白| 亚洲综合欧美| 亚洲字幕一区二区| 思思99re6国产在线播放| 欧美日韩综合视频网址| 婷婷五月精品中文字幕| 国产精品嫩模av在线| 69视频在线播放| www天堂在线| 亚洲激情图片qvod| 最新av免费在线观看| 台湾佬综合网| 91精品国产91| 日本精品一二区| 亚洲一区二区三区激情| 国产一级二级av| 欧美一区二区| 亚洲综合国产精品| yellow91字幕网在线| 欧美日韩午夜影院| 色欲AV无码精品一区二区久久| 久久男女视频| 日本精品二区| 亚洲伊人av| 精品久久国产97色综合| 久久久久久欧美精品se一二三四| 国产一区二区免费视频| 久久久在线视频| 国产精品嫩草影院8vv8| 亚洲精品不卡在线观看| 欧美高清第一页| 高清一区二区三区四区| 一区二区三区在线观看动漫| 精品国产午夜福利在线观看| 欧美激情第10页| 99re在线视频上| www在线观看黄色| 精品亚洲一区二区三区四区五区| 日本视频在线观看免费| 久久女同性恋中文字幕| 欧美a在线视频| 国产伦精品一区二区三区视频| 国产精品91视频| 欧美极品另类| 91精品国产综合久久久久| 久久一级黄色片| 久久久久久久综合| 亚洲一区二区在线视频观看| 欧美久久一级| 九九九久久久| 久久精品xxxxx| 亚洲一区二区国产| av网站在线观看免费| 性久久久久久久| 中文字幕在线观看网址| 日本系列欧美系列| 大陆极品少妇内射aaaaaa| 日韩在线观看一区二区三区| 97在线视频观看| 色鬼7777久久| 韩国三级一区| 日韩欧美在线不卡| 久久综合久久鬼| 久久这里只有精品首页| 久久国产精品国产精品| 在线精品国产| 九九热久久66| 中文成人在线| 91大神福利视频在线| 青青视频在线观| 91精品久久久久久久久99蜜臂| 久久久久成人网站| 欧美国产一区在线| 中文字幕无码人妻少妇免费| 蜜臀av在线播放一区二区三区 | 日本黄色免费视频| 欧美日韩国产首页| 天堂资源在线播放| 国产午夜精品一区二区| 国产又黄又嫩又滑又白| 日av在线不卡| 欧美国产亚洲一区| 日本一区二区高清不卡| 91久久在线播放| 亚洲天堂资源| 欧美成人午夜激情在线| 日本高清中文字幕二区在线| 欧美一二三四区在线| 中文无码精品一区二区三区| 亚洲精品免费在线观看| 久久久久久九九九九九| 成人毛片视频在线观看| 动漫精品视频| 91插插插插插插| 久久亚洲精精品中文字幕早川悠里| 亚洲在线观看网站| 青青草精品视频| 亚洲熟妇国产熟妇肥婆| 99久久婷婷这里只有精品| 欧美一区二区视频17c| 亚洲成人1区| 国产精品久久久久久久久| 激情国产在线| 欧美精品在线播放| av小次郎在线| 日韩中文字幕网| av资源种子在线观看| 亚洲视频欧美视频| 午夜视频在线免费播放| 精品国产一区a| 精品国产一级片| 欧美一区二区不卡视频| 夜夜躁狠狠躁日日躁av| 欧美三级日韩三级| 最新中文字幕一区| 欧美性猛交xxxxx水多| 日日夜夜综合网| 五月婷婷欧美视频| 日本在线视频免费观看| 国产精品午夜久久| 亚洲av无一区二区三区| 国产精品久久99| 一级片黄色录像| 中文字幕一区二区5566日韩| 国产精品免费在线视频| 国产精品毛片高清在线完整版| 国产精品成人在线视频| 国产婷婷色一区二区三区四区| 亚洲精品成人无码| 国产精品欧美精品| 美国精品一区二区| 亚洲人一二三区| 亚洲欧美一区二区三区四区五区| 综合分类小说区另类春色亚洲小说欧美 | 色综合色综合久久综合频道88| 尤物在线网址| 久久久免费在线观看| 中文在线аv在线| 午夜欧美大片免费观看| 欧美黄色三级| 成人免费淫片aa视频免费| 亚洲日本va午夜在线电影| 欧美www视频| 亚洲天堂av线| 国语自产精品视频在线看8查询8| 午夜免费电影一区在线观看| 久久精品国产99久久| 男同互操gay射视频在线看| 韩国av一区| 欧洲av无码放荡人妇网站| 日韩国产欧美在线观看| 午夜啪啪小视频| 成人精品小蝌蚪| a级大片在线观看| 久久精品视频在线免费观看| 小向美奈子av| 亚洲一区二区三区视频在线| 九九热在线免费观看| 欧美区视频在线观看| 成人免费一级视频| 亚洲人成网在线播放| 免费在线看黄网站| 九九热这里只有精品免费看| 亚洲天堂av影院| 国产免费一区视频观看免费 | 97久久夜色精品国产九色| 久久久久久毛片免费看| 一区二区不卡视频| 亚洲精品乱码| 最新国产黄色网址| 成人三级在线视频| 美国精品一区二区| 欧美视频中文字幕在线| 国产毛片一区二区三区va在线 | 久久蜜桃av| 老太脱裤子让老头玩xxxxx| 视频在线在亚洲| 日本少妇xxx| 国产精品区一区二区三| 婷婷激情五月网| 欧美精品三级在线观看| 午夜国产在线视频| 久久亚洲春色中文字幕| 日韩电影免费观看高清完整版| 9a蜜桃久久久久久免费| 91综合在线| 国模杨依粉嫩蝴蝶150p| 丁香亚洲综合激情啪啪综合| 国产日韩精品中文字无码| 欧美日韩亚洲视频一区| www.欧美色| 日韩电影网在线| 怡红院在线播放| 国产精品视频资源| 久久99性xxx老妇胖精品| 成年人视频网站免费| 美女脱光内衣内裤视频久久影院| 制服.丝袜.亚洲.中文.综合懂| 色香欲www7777综合网| 久久久在线视频| 日韩精品成人在线观看| 中文字幕久精品免| 蜜桃久久av| 人妻熟女aⅴ一区二区三区汇编| 亚洲综合视频网| 亚洲国产精彩视频| 一本一道久久a久久精品逆3p | 国产高清免费av| 中文字幕综合一区| 国产极品嫩模在线观看91精品| 欧美一区2区三区4区公司二百| 国产精品久久久久久久免费软件| 国产麻豆xxxvideo实拍| 亚洲电影一区二区| 深爱激情五月婷婷| 精品综合久久久久久97| www999久久| 免费在线精品视频| 国产自产高清不卡| 国产视频精品免费| 91麻豆精品国产91久久久久| 精品国产丝袜高跟鞋| 成人久久一区二区| 最新精品国产| 91传媒理伦片在线观看| 亚洲va国产va欧美va观看| 精品久久在线观看| 久久视频国产精品免费视频在线 | 欧美亚洲国产一区二区三区va | 久久久成人精品| av在线国产精品| 无码人妻精品一区二区蜜桃百度| 国产精品一区二区x88av| 久久亚洲av午夜福利精品一区| 精品美女一区二区| 欧美裸体视频| 欧美三级华人主播| 麻豆国产欧美日韩综合精品二区| 日本黄色网址大全| 欧美写真视频网站| 黄色免费网站在线观看| 欧美精品一区二区蜜臀亚洲| 午夜精品一区二区三级视频| 一本大道av一区二区在线播放| 成人在线视频成人| 国产在线999| 中文字幕一区二区三区在线视频| 在线观看中文av| 亚洲成人免费视| 青春草在线观看| 国产精品美女久久| 国产精品多人| 亚洲黄色小说视频| 欧美日韩在线一区二区| 欧美性受ⅹ╳╳╳黑人a性爽| 麻豆成人小视频| 久久99精品久久久久久久久久久久| 污软件在线观看| 亚洲精品国产福利| 精品久久99| 男人添女荫道口图片| www国产精品av| 99国产精品久久久久久久成人| 久久久爽爽爽美女图片| 欧美日韩亚洲在线观看|