dirty

spring boot jpa @PreUpdate结合@DynamicUpdate使用的局限性

元气小坏坏 提交于 2019-12-06 04:53:54
通常给实体添加audit审计字段是一种常用的重构方法,如下: @Embeddable @Setter @Getter @ToString public class Audit { /** * 操作人 */ private String operName; /** * 操作、更新时间 */ private LocalDateTime operDate; } public interface Auditable { Audit getAudit(); void setAudit(Audit audit); } /** * 监听器 回调方法 */ @Slf4j @Transactional public class AuditListener { @PrePersist @PreUpdate public void setCreatedOn(Auditable auditable) { Audit audit = auditable.getAudit(); if(audit == null) { audit = new Audit(); auditable.setAudit(audit); } audit.setOperName("hkk"); audit.setOperDate(LocalDateTime.now()); } } 实体类的定义 @Builder @Data

go sync.Map使用和介绍

非 Y 不嫁゛ 提交于 2019-12-04 23:50:18
sync.Map使用和介绍 1、首先看下该sync.Map的使用: package main import ( "sync" "fmt" ) func main() { //开箱即用 var sm sync.Map //store 方法,添加元素 sm.Store (1 , "a" ) //Load 方法,获得value if v,ok:=sm.Load (1 );ok{ fmt.Println(v) } //LoadOrStore方法,获取或者保存 //参数是一对key:value,如果该key存在且没有被标记删除则返回原先的value(不更新)和true;不存在则store,返回该value 和false if vv,ok:=sm.LoadOrStore (1 , "c" );ok{ fmt.Println(vv) } if vv,ok:=sm.LoadOrStore (2 , "c" );!ok{ fmt.Println(vv) } //遍历该map,参数是个函数,该函数参的两个参数是遍历获得的key和value,返回一个bool值,当返回false时,遍历立刻结束。 sm.Range( func (k,v interface {}) bool { fmt.Print(k) fmt.Print( ":" ) fmt.Print(v) fmt.Println() return