JaVers是一个开源的Java版本控制框架,旨在帮助开发者更轻松地管理和跟踪应用程序中的对象版本。它提供了一种简单且强大的方式来处理对象的创建、修改和删除,以及版本控制和历史记录。JaVers适用于各种应用程序,包括但不限于Web应用程序、桌面应用程序和移动应用程序。
下面是两个个简单的JaVers示例代码,展示了如何使用JaVers实现数据比对以及对对象进行版本控制:
首先,需要在项目中引入JaVers的相关依赖,如果需要对结果持久化,还需要额外引入对应的依赖:
<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>
通过JaVers我们可以实现两个值对象的比较,通过下面的示例可以看到效果:
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可以帮助开发者完美解决了这类问题。
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我们可以实现对对象进行版本控制,通过下面的示例可以看到效果:
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对对象进行版本控制,并可以获取到对象历史数据。在实体变化时记录历史版本、变更过程以及变化明细。
===========================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查询语言,可以帮助开发者实现对数据库的各种查询,比如基于变化的属性、提交人、时间等等。
JaVers提供了两种持久化方式,一种是内存持久化,另一种是数据库持久
目前可以支持的数据库有:
在上面的例子当中,你可以通过配置Repository来实现变更过程的持久化,例如使用Mysql数据库,可以配置如下:
JaversRepository javersRepository = SqlRepositoryBuilder.sqlRepository() .withConnectionProvider(()-> getConnection()) .withDialect(DialectName.MYSQL) .build();Javers javers = JaversBuilder.javers() .registerJaversRepository(javersRepository) .build();
这样我们通过JQL查询就可以按需获取更多的历史数据了。
Javers在做数据对比以及数据变更追踪的过程中,提供了丰富的功能,如版本控制、事务管理、合并冲突和数据库迁移等。同时,JaVers的扩展性也非常好,开发者可以根据需要自定义和扩展框架的功能。
本文链接:http://www.28at.com/showinfo-26-47735-0.htmlJaVers:一个强大的Java版本控制框架
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com