基于AOP 封装数据库通用字段

基于AOP 封装数据库通用字段

数据库通用字段表

image-20210926213709596

如图所示 通用字段
  `create_user` bigint(64) DEFAULT NULL COMMENT '创建人',
  `create_dept` bigint(64) DEFAULT NULL COMMENT '创建部门',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_user` bigint(64) DEFAULT NULL COMMENT '修改人',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  `status` int(2) DEFAULT NULL COMMENT '状态',
  `is_deleted` int(2) DEFAULT '0' COMMENT '是否已删除',

对应java 实体

image-20210926214158634



import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;
/**
*通用实体
*/
@Data
public class BasePojo  implements Serializable {
	private static final long serialVersionUID = 1L;
	/**
	 * 创建部门
	 */
	private Long createDept;
	/**
	 * 创建时间
	 */
	private Date createTime;
	/**
	 * 修改人
	 */
	private Long updateUser;
	/**
	 * 修改时间
	 */
	private Date updateTime;

	private Long createUser;
}

业务实体集成通用实体

image-20210926214908685

开始AOP配置

自定义注解

image-20210926214255030

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.METHOD)
public @interface UserSaveOrUpdate {

	public static  final String INSERT = "insert";
	public static  final String UPDATE = "update";

	String value();
}

切面设置

import com.ch.event.bo.BasePojo;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springblade.core.secure.utils.AuthUtil;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;
import java.util.Date;

@Aspect
@Component
public class UserSaveOrUpdateAspet {
	@Pointcut("@annotation(com.ch.event.aop.UserSaveOrUpdate)")
	public void methodPointcut() {
	}
	@Around(value= "methodPointcut()")
	public Object around(ProceedingJoinPoint point) throws Throwable{
		MethodSignature signature = (MethodSignature) point.getSignature();
		Method method = signature.getMethod(); //获取被拦截的方法
		UserSaveOrUpdate annotation = method.getAnnotation(UserSaveOrUpdate.class);//获取注解
		String value = annotation.value();//获取注解的值
		String deptId = AuthUtil.getDeptId();//token工具类 取出对应的 数据
		Long userId = AuthUtil.getUserId();
		Date date = new Date();
		if (value.equals(UserSaveOrUpdate.INSERT)){//判断注解的值 如果是新增那就 插多一点
			Object[] args = point.getArgs();//获取请求的参数
			for (Object arg : args) {
				if(arg instanceof BasePojo){
					BasePojo cmEvent = (BasePojo)arg;
					cmEvent.setCreateUser(userId);
					cmEvent.setUpdateUser(userId);
					cmEvent.setCreateTime(date);
					cmEvent.setUpdateTime(date);
					cmEvent.setCreateDept(Long.valueOf(deptId));
				}
			}
		}
		return point.proceed();//放行
	}

}

controller使用

image-20210926214613087

    @PostMapping("/save")
	@ApiOperationSupport(order = 4)
	@ApiOperation(value = "新增", notes = "传入cmEvent")
	@UserSaveOrUpdate(UserSaveOrUpdate.INSERT)
	public R save(@Valid @RequestBody CmEvent cmEvent) {
		System.out.println("cmEvent:"+ cmEvent.getCreateUser()+cmEvent.getCreateTime());
		return R.status(cmEventService.save(cmEvent));
	}

结果打印

image-20210926214702648

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值