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

python做网站 jsp网站建设出题

python做网站 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.w-s-a.com/news/440963/

相关文章:

  • 饮食网站模板建网站中企动力优
  • 郑州 制造 网站东平企业建站公司
  • 天津设计师网站大全展示型网站搭建
  • 南宁网站建设 传导网站开发平台开发公司
  • 网站建设好处上海建设工程网站
  • 黑河哈尔滨网站建设太原网站制作定制开发
  • 建站做网站香河住房与建设局网站
  • 如何制造一个网站域名分类网站
  • 解析视频的网站怎么做凡科网快图
  • 企业网站优化问题接单app平台有哪些
  • 怎么做网站后缀识别符号才不会变什么是电子商务网站建设
  • 中山 五金 骏域网站建设专家专门用来制作网页的软件是什么
  • 怎么做刷东西的网站数据分析软件工具有哪些
  • 官方购物网站正品交易网站域名
  • lol网站建设seo 网站太小
  • 网站建设销售职责手机网站制作软件
  • 福州百度企业网站seo如何在电脑上登录wordpress
  • 开发区全力做好网站建设网络广告营销成功案例
  • 114网站建设高并发系统架构
  • php网站打开一片空白wordpress中文广告插件下载
  • 怎样建自己的网站免费的百度关键词排名点击
  • 医院网站建设的特点怎么查看网站百度快照
  • 网站 如何备案一般网站开发公司
  • 做网站的公司 贵阳郑州新像素ui设计培训收费
  • 温州网站建设公司电话给个免费的网址
  • 个人做电子商务网站备案软考高级
  • 淘宝客需要自己做网站吗四川遂宁做网站的公司
  • 编写网站策划书缘魁上海网站建设
  • 梧州外贸网站推广设计wordpress 上传 七牛
  • 增加网站备案千灯做网站