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

网站制作一般哪家好湛江网站建设价格

网站制作一般哪家好,湛江网站建设价格,如今做啥网站能致富,广东粤数网络建设有限公司问题分析 很多业务表里面有相同的公共字段,导致每次插入都要写相同的代码,代码冗余,不便于后期维护 公共字段填充是解决​​重复性字段统一管理​​问题的技术方案,主要用于自动处理实体类中那些在多处重复出现且赋值逻辑相同的…

问题分析

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

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

解决思路

代码实现

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/561059.html

相关文章:

  • 百度经验网站建设常州网上车管所
  • 建设银行门户网站专业网站建设电话
  • 网站制作没有原创图片怎么办湖南建设信息网官网
  • 网站建设风险管理免费网站专业建站
  • 校园二手市场网站建设方案wordpress 账号密码忘记
  • 天一建设网站哪个网站可以做思维导图
  • 英文企业网站带后台有数据库自己怎么建立网站
  • 商城网站功能介绍莆田网站建设开发
  • 之梦网站怎么做seo怎么做公司的中英文网站
  • 微楼书网站建设提供网站建设备案
  • 深圳维特网站建设营销型网站建设易网拓
  • 开源网站管理系统通化工程建设信息网站
  • 房地产数据网站网站页面相关产品链接怎么做
  • 网站后台动态播放怎么做的wordpress+4+chm
  • 美团网站怎么做怎么做企业网站平台
  • 使用c 语言建设网站优点信息型网站建设的目的定位
  • 常州网站快速排名优化2345网址导航怎么彻底删掉win7
  • 昆明做一个公司网站多少费用有路由器做网站
  • 有网站源代码 怎么样建设网站手机算命网站建设
  • 打不开网站怎么办南宁百度做网站多少钱
  • 金山区做网站吗百度上做网站推广
  • 秦皇岛公司做网站公司邮箱如何申请
  • 购物型网站山西公司网站建设
  • .tech域名的网站江苏省建设工程协会网站
  • 网站基础风格创建网站制作公司crm客户管理系统
  • 网络营销型网站建设的内容厦门公司注册网站
  • 网站建设入门教学网站的管理更新维护
  • 企业网站可以做跨境电商吗网站主机租用
  • div使用太多影响网站收录wordpress提交500错误
  • 网站开发案例网站怎样做seo