天天看點

jpa 自動建立時間和更新時間@CreatedDate,@CreatedBy,@LastModifiedDate,@LastModifiedBy

@EnableJpaAuditing

表示開啟審計功能。 支援在字段或者方法上進行注解

@CreateDate

@CreatedBy

@LastModifiedDate

@LastModifiedBy

下面開始使用

Application類加

@EnableJpaAuditing

表示開啟審計。

代碼:

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

寫一個類實作AuditorAware接口,因為擷取user的方法要自定義:

@Configuration
public class UserAuditor implements AuditorAware<String> {
    @Override
    public Optional<String> getCurrentAuditor() {
        String ss="user2";
        return Optional.ofNullable(ss);
    }
}
           

實體類上添加

@EntityListeners(AuditingEntityListener.class)

表示監聽這個類。

AuditingEntityListener.class

是自帶的預設監聽類。

@Data
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseEntity {
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private Long id;

    @CreatedDate
    private Date createDate;

    @LastModifiedDate
    private Date updateDate;

    @CreatedBy
    private String createBy;

    @LastModifiedBy
    private String updateBy;

    @Column(columnDefinition = "varchar(1) default '0' comment '删除辨別 0 未删除 1 已删除'")
    private String delFlag;
}
           

測試類代碼:

@RunWith(SpringRunner.class)  // 用什麼來運作測試,例如可以用Junit4.Class
@SpringBootTest  // 替代ContextConfiguration來指定上下文
public class UserTest {
    @Autowired
    private EntityManager entityManager;
    @Test
    @Transactional
    public void insert(){  // 插入的時候 2個時間都一樣,建立者和更新者也一樣
        User user = new User();
        user.setAddress("zhongshanlu");
        user.setMobile("159");
        user.setUsername("zhangfei");
        user.setPassword("1234");
        entityManager.persist(user);
        entityManager.flush();

    }
    @Test
    @Transactional
    public void update(){   // 更新,updateDate 和 updateBy是否變化
        User user = entityManager.find(User.class, 1l);
        user.setDelFlag("1");
        entityManager.merge(user);
        entityManager.flush();
    }
}
           
JPA

繼續閱讀