说明
基于springBoot+mybatis,三步完成
- 编写注解,然后将注解放在对应的想要填充的字段上
- 编写拦截器
- 注册拦截器
注解
AutoId
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface AutoId {
IdType type() default IdType.SNOWFLAKE;
enum IdType{
UUID,
SNOWFLAKE,
}
}
CreateTime
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({
ElementType.FIELD})
public @interface CreateTime {
String value() default "";
}
UpdateTime
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({
ElementType.FIELD})
public @interface UpdateTime {
String value() default "";
}
Mybatis拦截器
根据实体来选一种就行
实体没有父类的情况
import cn.hutool.core.util.IdUtil;
import com.example.mybatisinterceptor.annotation.AutoId;
import com.example.mybatisinterceptor.annotation.CreateTime;
import com.example.mybatisinterceptor.annotation.UpdateTime;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.binding.MapperMethod;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlCommandType;
import org.apache.ibatis.plugin.*;
import org.springframework.stereotype.Component;
import java.lang.reflect.Field;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
/**
* Mybatis拦截器实现类,用于在插入或更新操作中自动处理创建时间、更新时间和自增ID。
*/
@Component
@Intercepts({
@Signature(type = Executor