当前位置: 首页 > wzjs >正文

mac xampp安装wordpress广州seo网站服务公司

mac xampp安装wordpress,广州seo网站服务公司,房地产微网站模板,建筑工程专业问题分析 很多业务表里面有相同的公共字段,导致每次插入都要写相同的代码,代码冗余,不便于后期维护 公共字段填充是解决​​重复性字段统一管理​​问题的技术方案,主要用于自动处理实体类中那些在多处重复出现且赋值逻辑相同的…

问题分析

很多业务表里面有相同的公共字段,导致每次插入都要写相同的代码,代码冗余,不便于后期维护

公共字段填充是解决​​重复性字段统一管理​​问题的技术方案,主要用于自动处理实体类中那些在多处重复出现且赋值逻辑相同的字段(如创建时间、创建人、更新时间等)。

解决思路

代码实现

1,自定义注解

指定添加注解的地方

2,自定义切面类。切面=切入点+通知

定义切入点,确定切入点位置

定义通知,确定通知类型,通知要执行的操作

3,先给需要自动装配的方法加上注解,测试一下,再写通知操作

通知要执行的操作

1,获取方法对数据库操作类型,确定要填充的字段

  • 利用方法签名对象和反射获取注解对象

2,获取当前拦截的方法的参数(实体对象)

  • 判断防止出现空指针,接收对象用object最好

3,准备要赋值的数据

  • 利用ThreadLocal和其他工具类

4,根据不同的数据库操作类型,利用反射进行赋值

  • 利用反射获取需要装配的字段的set方法。
  • 利用invoke方法进行赋值。invoke()​反射核心方法,第一个参数是调用对象实例,后续是方法参数。

//指定注解只能加在方法上
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoFill {//数据库操作类型;update insert//指定当前数据库操作类型是更新还是插入,只有在插入或者更新的时候才需要自动填充功能OperationType value();
}
@Aspect
@Component
@Slf4j
public class AutoFillAspect {/** 切入点* */@Pointcut("execution(* com.sky.mapper.*.*(..)) && @annotation(com.sky.annotation.AutoFill)")public void autoFillPointCut() {}/*前置通知,在通知中进行公共字段的填充*/@Before("autoFillPointCut()")public void autoFill(JoinPoint joinPoint) {log.info("开始进行公共字段填充");//获取当前被拦截数据库操作的类型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) {//为四个公共字段赋值try {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);} catch (Exception e) {throw new RuntimeException(e);}} else 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) {throw new RuntimeException(e);}}}
}

http://www.dtcms.com/wzjs/340993.html

相关文章:

  • 郑州网站设计公司排名整合营销包括哪些内容
  • 网站运营需要学什么软件开发平台
  • 域名 做网站和邮箱发布平台
  • 网站会员系统模板谷歌seo快速排名软件首页
  • 商城网站的运营长春网站建设推广
  • 淄博网站建设专家高权重友情链接
  • 望野注音版安徽网站推广优化
  • 做个爬架网站如何做做网络推广可以通过哪些渠道推广
  • 网站设计制作的介绍外链怎么发
  • 上海到北京免费优化推广网站的软件
  • 大型网站的标准东莞做网站最好的是哪家
  • 保养车哪个网站做的好百度网盘下载慢怎么解决
  • 炫酷的个人网站北京seo公司有哪些
  • 聊城做wap网站公司实时新闻热点
  • 网站建设的有什么需求网址导航怎样推广
  • 建设的网站如何让用户注册网络营销首先要做什么
  • 清除wordpress数据库中多余的seo哪里有培训
  • 电商网站建设毕业设计抖音竞价推广怎么做
  • 投资公司网站建设需求淘宝权重查询入口
  • 济南seo网站建站百度推广登录平台网址
  • 手机怎么做自己的网站产品推广计划书怎么写
  • 做网站类型的营业执照证明如何填写免费公司网站建站
  • 重庆公司章程网上查询平台上海搜索优化推广
  • 保健品做哪个网站好nba哈登最新消息
  • 咸阳企业做网站上海网站排名seo公司哪家好
  • 军用棉被门网站建设拼多多关键词排名查询工具
  • 威海建设集团信息网站自己建网站怎么推广
  • 怎样设置网站访问权限排行榜前十名
  • 网站建设功能报价表5月疫情最新消息
  • 东莞市机电工程学校网站建设与管理经典广告推广词