哪能建设网站,网站备案去哪备案,做兼职上什么网站找,请牢记此域名目录
1 前言
2 使用方法
2.1 自定义枚举类
2.2 自定义注解AutoFill
2.3 自定义切面类并设定切入点
2.4 切面类中设置前置通知#xff0c;对公共字段赋值
2.5 在方法上添加自定义注解
3 最后 1 前言
在我们的项目中#xff0c;项目表可能会有一些公共的字段需要我们的…目录
1 前言
2 使用方法
2.1 自定义枚举类
2.2 自定义注解AutoFill
2.3 自定义切面类并设定切入点
2.4 切面类中设置前置通知对公共字段赋值
2.5 在方法上添加自定义注解
3 最后 1 前言
在我们的项目中项目表可能会有一些公共的字段需要我们的赋值比如更新时间(updateTime)等。如果我们每次都手动的进行设置那么代码将比较冗余且不易于维护。接下来我将介绍公共字段的自动填充来优雅的解决这个问题。
2 使用方法
2.1 自定义枚举类
该步骤用于标识数据库的操作类型如下
public enum OperationType {/*** 更新操作*/UPDATE,/*** 插入操作*/INSERT}
2.2 自定义注解AutoFill
该步骤用于标识需要进行公共字段自动填充的方法如下
Target(ElementType.METHOD) //表示该注解是用于方法上的
Retention(RetentionPolicy.RUNTIME) //表示该注解一直保留到运行时
public interface AutoFill {// 自动填充的操作类型: Update,InsertOperationType value();
}
2.3 自定义切面类并设定切入点
Aspect
Component
public class AutoFillAspect {/*** 符合以下要求的为切入点* 1.mapper包下任意类中参数和返回值任意的所有方法* 2.方法上必须含我们刚才定义的AutoFill注解*/Pointcut(execution(* com.xxx.mapper.*.*(..)) annotation(com.xxx.annotation.AutoFill))public void autoFillPointCut() {}
}
2.4 切面类中设置前置通知对公共字段赋值
Aspect
Component
public class AutoFillAspect {Pointcut(execution(* com.sky.mapper.*.*(..)) annotation(com.sky.annotation.AutoFill))public void autoFillPointCut() {}/*** 前置通知在通知中进行公共字段的赋值*/Before(autoFillPointCut())public void autoFill(JoinPoint joinPoint) {//获取拦截方法上的操作类型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.UPDATE) {try {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);} catch (Exception e) {e.printStackTrace();}} else if (operationType OperationType.INSERT) {//其它代码...}}
}
2.5 在方法上添加自定义注解
Mapper
public interface MyClassMapper {/*** 根据id修改分类* param category*/AutoFill(value OperationType.UPDATE)void update(MyClass myClass);
}
这样我们就不需要在服务层中为手动添加相关内容了解放双手。
3 最后
另附赠注释如下愿永无bug
/** _oo0oo_* o8888888o* 88 . 88* (| -_- |)* 0\ /0* ___/---\___* . \\| |// .* / \\||| : |||// \* / _||||| -:- |||||- \* | | \\\ - /// | |* | \_| \---/ |_/ |* \ .-\__ - ___/-. /* ___. . /--.--\ . .___* . .___\_|_/___. .* | | : - \.;\ _ /;./ - : | |* \ \ _. \_ __\ /__ _/ .- / /* -.____.___ \_____/___.-___.-* ---*** ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~** 佛祖保佑 永不宕机 永无BUG** 佛曰:* 写字楼里写字间写字间里程序员* 程序人员写程序又拿程序换酒钱。* 酒醒只在网上坐酒醉还来网下眠* 酒醉酒醒日复日网上网下年复年。* 但愿老死电脑间不愿鞠躬老板前* 奔驰宝马贵者趣公交自行程序员。* 别人笑我忒疯癫我笑自己命太贱* 不见满街漂亮妹哪个归得程序员*/