1、简介
1.1 @EntityListeners
官方解释:可以使用生命周期注解指定实体中的方法,这些方法在指定的生命周期事件发生时执行相应的业务逻辑。
简单来说,就是监听实体对象的增删改查操作,并对实体对象进行相应的处理。
1.2 生命周期对应注解
JPA一共提供了7种注解,分别是:
@PostLoad
:实体对象查询之后@PrePersist
: 实体对象保存之前@PostPersist
:实体对象保存之后@PreUpdate
:实体对象修改之前@PostUpdate
:实体对象修改之后@PreRemove
: 实体对象删除之前@PostRemove
:实体对象删除之后
通常情况下,数据表中都会记录创建人、创建时间、修改人、修改时间等通用属性。如果每个实体对象都要对这些通用属性手动赋值,就会过于繁琐。现在,使用这些生命周期注解,就可以实现对通用属性的自动赋值,或者记录相应操作日志。
2、环境准备
- 数据库:mysql
- 项目搭建:演示项目通过
Spring Boot 2.2.6
构建,引入spring-boot-starter-data-jpa
2.1 数据表
-- 用户表
CREATE TABLE `acc_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(40) NOT NULL DEFAULT '' COMMENT '用户名',
`password` varchar(40) NOT NULL DEFAULT '' COMMENT '密码',
`create_by` varchar(80) DEFAULT NULL,
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_by` varchar(80) DEFAULT NULL,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 日志表
CREATE TABLE `modify_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`action` varchar(20) NOT NULL DEFAULT '' COMMENT '操作',
`entity_name` varchar(40) NOT NULL DEFAULT '' COMMENT '实体类名',
`entity_key` varchar(20) DEFAULT NULL COMMENT '主键值',
`entity_value` varchar(400) DEFAULT NULL COMMENT<