https://gitee.com/wu-zhezhe/sky-delivery.git
今天设置的是公共字段填充配置
这不属于业务的开发
employee.setUpdateTime(LocalDateTime.now()); employee.setUpdateUser(BaseContext.getCurrentId());
这里是配置员工信息等到菜品信息还会有菜品信息我们可以设置一个公共的字段填充类来专门负责这些字段的修改
新建annotation包和注解文件
@Target(ElementType.METHOD) //表示这个注解可以应用于方法上。
@Retention(RetentionPolicy.RUNTIME) //表示这个注解在运行时是可访问的。
public @interface AutoFill {
// 操作类型,用于指定自动填充的具体行为。
OperationType value();
}
新建切入点
/** * 切入点 * * */ @Pointcut("execution(* com.sky.mapper.*.*(..)) 121212&&@annotation(com.sky.annotation.AutoFill)") public void autoFillPointCut(){ }
@Before("autoFillPointCut()") //拦截前执行
public void autoFill(JoinPoint joinPoint) throws Exception { //获取拦截的数据库的操作类型 MethodSignature signature= (MethodSignature) joinPoint.getSignature();//获取方法签名 AutoFill autoFill= signature.getMethod().getAnnotation(AutoFill.class);//获取方法的注解对象 OperationType operationType=autoFill.value(); //获取当前被拦截的实体对象 Object[] args =joinPoint.getArgs(); if (args ==null||args.length==0){ return; } Object entity=args[0]; //准备赋值的数据 LocalDateTime now=LocalDateTime.now(); Long currentId= BaseContext.getCurrentId(); //根据当前不同的类型赋值 if (operationType==OperationType.INSERT){ //为四个公共字段赋值 Method setCreateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_TIME, LocalDateTime.class); Method setCreateUser=entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_USER,Long.class); Method setUpdateTime=entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME, LocalDateTime.class); Method setUpdateUser=entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER,Long.class); //通过反射为对象赋值 setCreateTime.invoke(entity,now); setCreateUser.invoke(entity,currentId); setUpdateTime.invoke(entity,now); setUpdateUser.invoke(entity,currentId); }else if(operationType==OperationType.UPDATE){ Method setUpdateTime=entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME, LocalDateTime.class); Method setUpdateUser=entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER,Long.class); //通过反射为对象赋值 setUpdateTime.invoke(entity,now); setUpdateUser.invoke(entity,currentId); } } }
配置好了这个切面类
在Mapper层设置
@AutoFill(value = OperationType.INSERT)标签:getClass,invoke,项目,entity,getDeclaredMethod,外卖,now,苍穹,class From: https://blog.csdn.net/2302_79804180/article/details/142663047