xl_echo编辑整理
整个JPA框架的东西很多,前面的一至六章其实已经可以满足我们工作中的大部分需求。那么还有一小部分比较不常用的我们就开始归纳到第七章及后面的章节。本章我们主要讲Auditing及其事件详解,了解它的主要作用及使用。
Auditing的作用可以直接归纳为帮助我们有效的记录数据的变更。它主要的四个注解如下:
- @CreatedBy:哪个用户创建的。
- @CreatedDate:创建的时间。
- @LastModifiedBy:修改实体的用户。
- @LastModifiedDate:最后一次修改时间。
要使用它也比较简单,记住一下几个步骤即可:
第一步:到数据库对应的映射类上面加上@EntityListeners(AuditingEntityListener.class)
第二部:在启动类上面添加@EnableJpaAuditing(注意这里针对的是springboot项目)
第三部:在实体类对应的字段上加上你需要的注解
package com.echo.example.example.entity;
import lombok.Data;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.util.Date;
/**
* author:XLecho
* Date:2018/10/29 0029
* Time:16:16
*/
@Data
@Entity
@Table(name = "consumer")
@EntityListeners(AuditingEntityListener.class)
public class Consumer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
@CreatedBy
@Column(name = "operation_id")
private Long operationId;
@CreatedDate
@Column(name = "create_time")
private Date createTime;
@LastModifiedDate
@Column(name = "update_time")
private Date updateTime;
}
第四部:实现AuditorAware接口告诉JPA当前的用户是谁(由于我们这里没有做任何安全框架整合,和登陆功能,所以我们手动造一个返回用户)
package com.echo.example.example.auditing;
import org.springframework.data.domain.AuditorAware;
import java.util.Optional;
/**
* author:XLecho
* Date:2018/10/29 0029
* Time:16:35
*/
public class MyAuditorAware implements AuditorAware<Long> {
@Override
public Optional<Long> getCurrentAuditor() {
return Optional.of(new Long(1));
}
}
执行一次插入数据操作
package com.echo.example.example.controller;
/**
* author:XLecho
* Date:2018/10/25 0025
* Time:19:12
*/
@RestController
@RequestMapping(path = "/demo")
public class UserController {
@Autowired
private ConsumerRepository consumerRepository;
@RequestMapping(value = "/auditing", method = RequestMethod.GET)
public void auditingTest(){
Consumer consumer = new Consumer();
consumer.setEmail("ccc");
consumer.setName("ccc");
consumerRepository.save(consumer);
}
}
当执行完成插入操作之后,我们观察数据库,就可以看到,数据库中不仅仅设置进了email、name,而且还设置进了operation_id和create_time、update_time;(注意,自mysql5.7之后,有很多的数据库是支持时间的自动填充的,但是本章节所使用的mysql为5.6.没有该功能。出现的数值都是auditing的作用)
数据库显示数据如下:
项目地址:https://git.coding.net/xlecho/SpringDataJpa.git