中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Springboot hibernate envers怎么使用

發布時間:2020-06-22 16:40:57 來源:億速云 閱讀:298 作者:清晨 欄目:開發技術

這篇文章將為大家詳細講解有關Springboot hibernate envers怎么使用,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

添加maven配置

<&#63;xml version="1.0" encoding="UTF-8"&#63;>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.5.RELEASE</version>
  </parent>
  <artifactId>springboot-envers</artifactId>
  <name>springboot-envers</name>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-envers</artifactId>
    </dependency>
    <dependency>
      <groupId>com.h3database</groupId>
      <artifactId>h3</artifactId>
    </dependency>
  </dependencies>

</project>

使用User類作為被審計的對象

@Entity
@Table(name = "user")
@Audited
@JsonIgnoreProperties(value = "hibernateLazyInitializer")
public class User {

  @Id
  @GeneratedValue
  private Long id;
  private String name;

  public Long getId() {
    return id;
  }

  public void setId(Long id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
}

添加配置

spring.jpa.hibernate.ddl-auto=create
spring.jpa.properties.org.hibernate.envers.audit_strategy=org.hibernate.envers.strategy.internal.ValidityAuditStrategy
spring.jpa.properties.org.hibernate.envers.audit_strategy_validity_store_revend_timestamp=true
spring.h3.console.enabled=true
spring.h3.console.path=/h3
spring.datasource.url=jdbc:h3:mem:envers
spring.datasource.username=sa
spring.datasource.password=sa
spring.datasource.driverClassName=org.h3.Driver

創建相應的UserRepository

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

添加用于增刪改的Controller

@Controller
public class UserController {
  @Autowired
  private UserRepository userRepository;
  private int counter;

  @ResponseBody
  @RequestMapping("/user/add")
  public Object add() {
    User user = new User();
    user.setName("name" + ++counter);
    userRepository.save(user);
    return user;
  }

  @ResponseBody
  @RequestMapping("/user/update/{id}")
  public Object update(@PathVariable Long id) {
    User user = userRepository.getOne(id);
    user.setName("name" + ++counter);
    userRepository.save(user);
    return user;
  }
  @ResponseBody
  @RequestMapping("/user/delete/{id}")
  public Object delete(@PathVariable Long id) {
    User user = userRepository.getOne(id);
    userRepository.delete(user);
    return user;
  }
}

添加啟動類

@SpringBootApplication
public class SpringbootEnversApplication {
  public static void main(String[] args) {
    SpringApplication.run(SpringbootEnversApplication.class, args);
  }
}

運行程序后,訪問http://localhost:8080/h3,輸入密碼sa,即可登陸數據庫并查詢數據

由于配置了spring.jpa.hibernate.ddl-auto=create,可以看到系統已經為我們生成了相關的數據表

Springboot hibernate envers怎么使用

其中USER是實體類的表,USER_AUD是對應的審計表

依次訪問以下鏈接,增加兩條數據,分別對兩條數據進行更新,再刪除第一條數據

  http://localhost:8080/user/add

  http://localhost:8080/user/add

  http://localhost:8080/user/update/1

  http://localhost:8080/user/update/2

  http://localhost:8080/user/delete/1

在h3頁面查詢USER表

Springboot hibernate envers怎么使用

可以看到,USER表只有第二條數據更新后的記錄了

而查詢USER_AUD表

Springboot hibernate envers怎么使用

可以看到表中存在5條記錄,分別對應著上面的五次操作

其中ID是USER表的主鍵,REV是USER_AUD的主鍵,REVTYPE是操作類型,0新增,1更新,2刪除,name則是對應USER的name屬性

hibernate提供了兩種審計策略,分別是

  • org.hibernate.envers.strategy.internal.DefaultAuditStrategy
  • org.hibernate.envers.strategy.internal.ValidityAuditStrategy

如果使用DefaultAuditStrategy,USER_AUD表中不會有REVEND,REVEND_TSTMP兩個字段,只會單純的記錄變更與版本

而使用ValidityAuditStrategy,在新增一條變更記錄時,會更新上一條變更記錄的REVEND,REVEND_TSTMP為當前的版本號以及變更時間

因為ValidityAuditStrategy除了插入新紀錄還要更新舊的記錄,所以插入速度會慢一點,但是因為提供了額外的信息,對于數據查詢,速度則較DefaultAuditStrategy更快一些


關于Springboot hibernate envers怎么使用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

万源市| 澄江县| 什邡市| 永春县| 太仓市| 栾城县| 镇平县| 那曲县| 清水河县| 高要市| 尼勒克县| 晋宁县| 乌苏市| 新兴县| 巫溪县| 永康市| 桓台县| 东莞市| 潍坊市| 项城市| 瑞金市| 长汀县| 乡宁县| 肇州县| 旅游| 博湖县| 赫章县| 开阳县| 兴安县| 日喀则市| 佳木斯市| 闻喜县| 阳曲县| 鲁甸县| 启东市| 江达县| 潮州市| 宜兰县| 崇仁县| 洛扎县| 沙河市|