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

保定定兴网站建设揭阳网站免费建站

保定定兴网站建设,揭阳网站免费建站,jsp做的知名网站,东莞建设网站的公司文章目录 概要整体架构流程技术细节小结 概要 在新增员工或者新增菜品分类时需要设置创建时间、创建人、修改时间、修改人等字段#xff0c;在编辑员工或者编辑菜品分类时需要设置修改时间、修改人等字段。这些字段属于公共字段#xff0c;也就是也就是在我们的系统中很多表…文章目录 概要整体架构流程技术细节小结 概要 在新增员工或者新增菜品分类时需要设置创建时间、创建人、修改时间、修改人等字段在编辑员工或者编辑菜品分类时需要设置修改时间、修改人等字段。这些字段属于公共字段也就是也就是在我们的系统中很多表中都会有这些字段如下 序号字段名含义数据类型1create_time创建时间datetime2create_user创建人idbigint3update_time修改时间datetime4update_user修改人idbigint 而针对于这些字段我们的赋值方式为 1). 在新增数据时, 将createTime、updateTime 设置为当前时间, createUser、updateUser设置为当前登录用户ID。 2). 在更新数据时, 将updateTime 设置为当前时间, updateUser设置为当前登录用户ID。 我们使用AOP切面编程实现功能增强来完成公共字段自动填充功能。 技术细节 在实现公共字段自动填充也就是在插入或者更新的时候为指定字段赋予指定的值使用它的好处就是可以统一对这些字段进行处理避免了重复代码。在上述的问题分析中我们提到有四个公共字段需要在新增/更新中进行赋值操作, 具体情况如下: 序号字段名含义数据类型操作类型1create_time创建时间datetimeinsert2create_user创建人idbigintinsert3update_time修改时间datetimeinsert、update4update_user修改人idbigintinsert、update 实现步骤 1). 自定义注解 AutoFill用于标识需要进行公共字段自动填充的方法 2). 自定义切面类 AutoFillAspect统一拦截加入了 AutoFill 注解的方法通过反射为公共字段赋值 3). 在 Mapper 的方法上加入 AutoFill 注解 若要实现上述步骤需掌握以下知识(之前课程内容都学过) 技术点枚举、注解、AOP、反射 枚举类: package com.sky.enumeration;/*** 数据库操作类型*/ public enum OperationType {/*** 更新操作*/UPDATE,/*** 插入操作*/INSERT}自定义注解: package com.sky.annotation;import com.sky.enumeration.OperationType; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/*** 自定义注解用于标识某个方法需要进行功能字段自动填充处理*/ Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface AutoFill {//数据库操作类型UPDATE INSERTOperationType value(); } 自定义切面类: 公共字段填充,我们选择在连接点(方法)执行前就进行,所以用Before将连接点上的AutoFill注解拦截下利用注解的.value()获取到注解中的内容(数据库操作类型)获取到该连接点的参数准备好填充的内容利用反射根据数据库操作类型进行填充 package com.sky.aspect;import com.sky.annotation.AutoFIll; import com.sky.constant.AutoFillConstant; import com.sky.context.BaseContext; import com.sky.enumeration.OperationType; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.Signature; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component;import java.lang.annotation.Annotation; import java.lang.reflect.Method; import java.time.LocalDateTime;Aspect Slf4j Component 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(进行公共字段赋值);//获取当前被拦截方法上的注解AutoFIll autoFIll ((MethodSignature) joinPoint.getSignature()).getMethod().getAnnotation(AutoFIll.class);//MethodSignature signature (MethodSignature) joinPoint.getSignature();//方法签名对象//AutoFIll autoFill signature.getMethod().getAnnotation(AutoFIll.class);//获取数据库操作类型(INSERT,UPDATE)OperationType operationType autoFIll.value();//获取当前被拦截方法上的参数(实体对象)Object[] args joinPoint.getArgs();if (args null || args.length 0) {return;}Object entity args[0];//准备要填充的内容LocalDateTime now LocalDateTime.now();Long id 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, id);setUpdateTime.invoke(entity, now);setUpdateUser.invoke(entity, id);} catch (Exception e) {e.printStackTrace();}} 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, id);} catch (Exception e) {e.printStackTrace();}}} }AutoFIll(value OperationType.INSERT)void insert(Dish dish); 效果展示
http://www.hkea.cn/news/14540752/

相关文章:

  • qq钓鱼网址制作手机版北京网站seo公司
  • 广西微信网站建设爱站网 关键词挖掘
  • dedecms网站模板免费下载厦门网站建设哪家不错推荐
  • 网站建设会议议程高端网站建设
  • 网站跟域名是什么关系网站建设目的及功能定位
  • 如何建设网页制作的网站网站设计案例方案
  • 规范 加强网站建设管理创业做旅游网站
  • 二手网站开发网络广告投放
  • 网站后台html模板下载logo设计公司价格
  • 营销型网站的要素长春
  • 顺平网站建设网站运营小结
  • 网站设计与网页配色实例精讲东莞seo推广优化排名
  • 宁波网站建设详细策划营销策略主要包括哪些
  • 软件培训网站阿里巴巴有几个网站是做外贸的
  • 随便玩玩在线制作网站wordpress连接微博源码
  • 网站设计工作室沧州高端网站建设公司
  • 大型网站稳定性建设视频课程hyperx wordpress 汉化
  • 泉州市培训建设系统中心网站云原神官方网站正版下载
  • 电子商务 网站系统成都网站建设门户
  • 湖南长沙门户网站Windows wordpress搭建
  • 网站静态化 更新wordpress如何修改后台网址
  • 电子商务网站开发数据库表格wordpress cnki
  • 石家庄做网站网络公司建设网站设计
  • 国外化工网站模板网站开发png图标素材
  • 东莞互联网营销网站建设ip备案信息查询
  • 网站做全局搜索meet wordpress
  • 教学网站模板下载广西建设职业技术学校官方网站
  • 淄博网站制作多样定制地理位置地图网站建设
  • 长春网页制作建站wordpress公司网站
  • 南水北调建设管理局网站深圳建网站需要多少钱