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

网站怎样做网银支付小程序开发制作费用

网站怎样做网银支付,小程序开发制作费用,免费推广网站下载,一套完整的app 开发流程场景:当处理一些请求时,会重复的对数据库的某些字段进行赋值(如:在插入和更新某个物品时,需要更新该物品的更新时间和更新者的信息),这样会导致代码冗余。 如: 思路: 自…

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

  • 自定义注解 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.hyszgw.com/news/76111/

相关文章:

  • 免费网站空间免费主机永康公司做网站
  • 建设大型门户网站桂林北站图片
  • 网站后台怎么添加代码单页简洁手机网站模板
  • 音乐网站设计外国用什么网站可以做
  • 自己做的博客网站吗做像淘宝网的网站
  • 网站icp 备案进度查询简述网站的建设流程
  • 厦门商场网站建设收费网站建设视频教程免费下载
  • 小企业建网站自己如何做网站源码
  • 网站内搜索功能怎么做开发app的网站有哪些
  • 榆垡网站建设自建团体电子商务网站建设成本
  • 免费做网站怎么做网站619好网站有没有
  • 网站建设的实训总结汕头手机模板建站
  • 新乡市网站建设有哪些公司网络推广推广外包服务
  • ps做网站的效果图榆林市建设局官方网站
  • 贵州住房城乡建设厅网站外贸网站推广上海
  • 手机网站制作费用多少重庆旅游seo整站优化
  • 教你做文案的网站推荐网站没排名的原因
  • 免费漫画网站企业网站seo诊断
  • 设计感十足的网站接广告推广
  • 网站建设基本流程包括信息流广告优秀案例
  • 简单手机网站模板个人网站的设计
  • 太原集团网站建设番禺保安公司
  • 网站搜索引擎拓客汕头网站建设培训公司
  • 网站网站怎么建设网站域名所有人
  • 系统下载网站源码网站开发工具有组合
  • 网站如何做才会有流量商城网站建设分为几块
  • 电商公司简介模板泰州做网站优化
  • 南宁网站公司wordpress 模板代码
  • 诏安县城乡建设局网站做电影网站有哪些
  • 网站制作自己接单国外设计搜索网站