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

盐城做网站哪家最好wordpress 拼音

盐城做网站哪家最好,wordpress 拼音,常用开发工具,济宁网站建设 企业谷场景:当处理一些请求时,会重复的对数据库的某些字段进行赋值(如:在插入和更新某个物品时,需要更新该物品的更新时间和更新者的信息),这样会导致代码冗余。 如: 思路: 自…

场景:当处理一些请求时,会重复的对数据库的某些字段进行赋值(如:在插入和更新某个物品时,需要更新该物品的更新时间和更新者的信息),这样会导致代码冗余。
如:
在这里插入图片描述
思路:

  • 自定义注解 AutoFill,用于标识需要进行公共字段自动填充的方法
  • 自定义切面类 AutoFillAspect,统一拦截加入了 AutoFill 注解的方法,通过反射为公共字段赋值
  • 在 Mapper 的方法上加入 AutoFill 注解

实现:
定义AutoFill注解:

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;/*** ClassName: AufoFill* PackageName: com.sky.Annotation* Description: 用于表示某个方法需要进行功能字段自动填充处理** @Author Xiyan Zhong* @Create 2023/12/18 下午2:55* @Version 1.0*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoFill {// 数据库操作类型:UPDATE INSERTOperationType 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.reflect.Method;
import java.time.LocalDateTime;/*** ClassName: AutoFillAspect* PackageName: com.sky.Aspect* Description:自定义切面,实现公共字段自动填充逻辑** @Author Xiyan Zhong* @Create 2023/12/18 下午3:00* @Version 1.0*/@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 annotation = signature.getMethod().getAnnotation(AutoFill.class);// 获取方法上的注解对象OperationType operationType = annotation.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) {e.printStackTrace();}} else if (operationType == OperationType.UPDATE) {try {// 为2个公共字段赋值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){e.printStackTrace();}}}
}

需要注意的是,在反射中获取方法名时和判断拦截方法的类型时,分别采用的是常量枚举,而不是直接使用方法的字符串名称,这样可以降低编码时的错误率,也更加规范,对应的代码:

package com.sky.constant;/*** 公共字段自动填充相关常量*/
public class AutoFillConstant {/*** 实体类中的方法名称*/public static final String SET_CREATE_TIME = "setCreateTime";public static final String SET_UPDATE_TIME = "setUpdateTime";public static final String SET_CREATE_USER = "setCreateUser";public static final String SET_UPDATE_USER = "setUpdateUser";
}
/*** 数据库操作类型*/
package com.sky.enumeration;/*** 数据库操作类型*/
public enum OperationType {/*** 更新操作*/UPDATE,/*** 插入操作*/INSERT}

在Mapper对应的方法中,添加注解@AutoFill:

    /*** 插入数据* @param category*/@Insert("insert into category(type, name, sort, status, create_time, update_time, create_user, update_user) " +" values" +"(#{type}, #{name},#{sort},#{status},#{createTime},#{updateTime},#{createUser},#{updateUser})")@AutoFill(OperationType.INSERT)void insert(Category category);/*** 根据id修改分类* @param category*/@AutoFill(OperationType.UPDATE)void update(Category category);

删除对应的服务实现类的赋值操作。

http://www.yayakq.cn/news/647013/

相关文章:

  • 青岛正规公司网站建设公司html网页制作兼职平台
  • php房产中介网站源码学习网站建设与管理
  • 从化电子商务网站建设thinkphp做网站快吗
  • 哪个平台可以免费打广告谷歌seo综合查询
  • 中职网站建设与管理专业黄岛网站制作
  • 新余网站开发公司网站开发与设计
  • 企业网站类型wordpress js 插件开发
  • 域名和网站橱柜手机网站模板
  • 建材网站建设怎样用godaddy建设一个网站
  • 上海营销型企业网站濮阳网页设计
  • 建网站注册wordpress鼠标滑过几何线条
  • 成品ppt的网站免费直播有哪些传奇官网
  • 门户网站功能如何判断网站是用什么程序做的
  • 试用网站建设自己制作头像的软件
  • 专门帮忙做网站的公司建设企业网站登录901
  • 创世网络网站建设怎么样html代码表格
  • 西安北郊网站开发线下推广团队
  • 网站开发技术可行性分析北京网站建设排名浩森宇特
  • 有哪些是外国人做的网站吗广州新塘网站建设推广公司
  • 网站建设现状分析建设网站的目的和内容
  • 如何做网站首页提升网站排名
  • 免费网站建站塔山双喜指定网站怎么设置路由器只访问
  • 家具展示型网站用vs做html网站
  • 高端html5网站建设织梦模板网站设计风格有哪些
  • 建设银行手机网站沈阳便宜做网站的
  • 廊坊电子商务网站建设云筑网
  • 成都家具网站建设本地的南通网站建设
  • 百度品牌广告多少钱seo如何快速出排名
  • 门户网站做吗换空间对网站的影响
  • 建议网站的方案湖北省建设工程造价管理协会网站