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

网站一个月个人网站可以做音乐吗

网站一个月,个人网站可以做音乐吗,温州网站建设和运营,工信网备案网站背景介绍 在实际项目开发中,我们经常需要处理一些公共字段的自动填充,比如: createTime (创建时间)updateTime (更新时间)createUser (创建人)updateUser (更新人) 这些字段在每个表中都存在,如果每次都手动设置会很麻烦。下面介绍三种常用的解决方案。 方案一#xff1a;M…背景介绍 在实际项目开发中,我们经常需要处理一些公共字段的自动填充,比如: createTime (创建时间)updateTime (更新时间)createUser (创建人)updateUser (更新人) 这些字段在每个表中都存在,如果每次都手动设置会很麻烦。下面介绍三种常用的解决方案。 方案一MyBatis AOP方式 这种方式通过自定义注解和切面来实现自动填充。 代码实现 添加AOP 和 MyBatis依赖 SpringMVC !-- mybatis-spring -- dependencygroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactIdversion3.0.3/version /dependency !-- AOP-spring -- dependencygroupIdorg.springframework/groupIdartifactIdspring-aspects/artifactIdversion6.1.12/version/dependencySpringBoot !--mybatis起步依赖-- dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion3.0.3/version /dependency !-- AOP -- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId /dependency自定义枚举类 /*** 数据库操作类型*/ public enum OperationType {UPDATE, //更新操作INSERT //插入操作}自定义注解 Target(ElementType.METHOD) // 作用于方法上 Retention(RetentionPolicy.RUNTIME) public interface AutoFill {OperationType value(); // INSERT/UPDATE }切面类实现 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) throws NoSuchMethodException {log.info(开始公共字段自动填充...);//获取当前被拦截的方法上的数据库操作字段MethodSignature signature (MethodSignature) joinPoint.getSignature(); // 方法签名对象AutoFill autoFill signature.getMethod().getAnnotation(AutoFill.class); // 获取方法上的注解对象OperationType value 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 (value OperationType.INSERT){// 为4个公共字段赋值try {Method setCreateTime entity.getClass().getDeclaredMethod(setCreateTime, LocalDateTime.class);Method setCreateUser entity.getClass().getDeclaredMethod(setCreateUser, Long.class);Method setUpdateTime entity.getClass().getDeclaredMethod(setUpdateTime, LocalDateTime.class);Method setUpdateUser entity.getClass().getDeclaredMethod(setUpdateUser, 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 (value OperationType.UPDATE) {// 为4个公共字段赋值try {Method setUpdateTime entity.getClass().getDeclaredMethod(setUpdateTime, LocalDateTime.class);Method setUpdateUser entity.getClass().getDeclaredMethod(setUpdateUser, Long.class);// 通过反射为对象属性赋值setUpdateTime.invoke(entity, now);setUpdateUser.invoke(entity, currentId);} catch (Exception e) {e.printStackTrace();}}}}定义常量类可选 其中setCreateTime直接硬编码容易出错并且不够优雅可以将其定义为常量类 /*** 公共字段自动填充相关常量*/ 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; }在Mapper中对应需要进行公共字段自动填充的方法上加上注解 AutoFill(value OperationType.UPDATE) void update(Category category)AutoFill(value OperationType.INSERT) void insert(Category category)优缺点 优点: 灵活性强,可自定义复杂的填充逻辑可以统一管理所有需要自动填充的字段 缺点: 实现相对复杂需要编写较多代码需要手动添加注解 方案二MyBatis-Plus方式 MyBatis-Plus提供了更简便的实现方式。 代码实现 添加AOP 和 MP依赖 SpringBoot3 !--springboot2整合MybatisPlus-- !--MybatisPlus起步依赖-- dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.3.1/version /dependency!--springboot3整合MybatisPlus-- !--MybatisPlus起步依赖-- dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-spring-boot3-starter/artifactIdversion3.5.5/version /dependency!-- Spring Boot AOP依赖 -- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId /dependency实现 MetaObjectHandler接口 需要定义一个类需要实现 MetaObjectHandler然后实现里面的 insertFill() 和 updateFill() 方法分别代表在执行插入操作和更新操作时执行对应的方法而方法内部去实现你需要注入的字段的值 Component Slf4j public class MyMetaObjectHandler implements MetaObjectHandler {Overridepublic void insertFill(MetaObject metaObject) {log.info(start insert fill ....);// 设置插入时的字段this.setFieldValByName(createTime, LocalDateTime.now(), metaObject);this.setFieldValByName(updateTime, LocalDateTime.now(), metaObject);this.setFieldValByName(createUser, BaseContext.getCurrentId(), metaObject);this.setFieldValByName(updateUser, BaseContext.getCurrentId(), metaObject);}Overridepublic void updateFill(MetaObject metaObject) {log.info(start update fill ....);// 设置更新时的字段this.setFieldValByName(updateTime, LocalDateTime.now(), metaObject);this.setFieldValByName(updateUser, BaseContext.getCurrentId(), metaObject);} } 实体类字段添加TableField注解 TableField(fill FieldFill.INSERT) // 执行插入时自动填充 private LocalDateTime createTime;TableField(fill FieldFill.INSERT) private Long createUser;TableField(fill FieldFill.INSERT_UPDATE) // 执行插入和更新时自动填充 private LocalDateTime updateTime;TableField(fill FieldFill.INSERT_UPDATE) private Long updateUser;TableField(fill FieldFill.INSERT) 执行插入时自动填充 TableField(fill FieldFill.INSERT_UPDATE) 执行插入和更新时自动填充 还有其他的属性可以根据业务需求自行添加 优缺点 优点: 使用简单,代码量少开箱即用,无需复杂配置与MyBatis-Plus无缝集成 缺点: 填充逻辑相对固定扩展性较差 方案三数据库默认值 直接在数据库表设计时设置默认值。 SQL实现 CREATE TABLE table_name (id bigint NOT NULL AUTO_INCREMENT,create_time datetime DEFAULT CURRENT_TIMESTAMP,update_time datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id) ) ENGINEInnoDB;优缺点 优点: 实现最简单不需要额外代码数据库层面保证字段有值 缺点: 只能处理简单的默认值场景无法获取当前登录用户等业务信息不同数据库实现可能不一样 方案选择建议 对于简单的时间字段(createTime/updateTime): 建议使用数据库默认值可以保证数据的一致性 需要记录操作人等业务字段: 推荐使用MyBatis-Plus方式简单高效,满足大部分需求 有特殊业务逻辑: 考虑使用AOP方式可以实现更复杂的填充逻辑 实际项目中可以组合使用: 时间字段用数据库默认值业务字段用MyBatis-Plus或AOP 总结 三种方案各有优劣,需要根据实际需求选择推荐优先使用MyBatis-Plus方式,简单且功能足够特殊场景再考虑其他方案可以组合使用不同方案,扬长避短
http://www.hkea.cn/news/14263069/

相关文章:

  • 吴忠北京网站建设网站服务器租赁费用
  • 17做网站广州沙河地址高平网站建设
  • 大学生家教网站开发网站建设盈利
  • 以下哪一项不属于seo对网站推广的作用抖音运营推广策划方案
  • 公司最近想做个网站怎么办银川注册公司流程和费用
  • 做网站网页的成本专业做俄语网站建设司
  • 有专门做辩论的网站吗人力资源外包收费报价表
  • 国外黄冈网站推广软件免费吗百度小程序在哪里找
  • 网站建设模板平台国外交易平台
  • 做百度网站每年的费用多少钱手机网站建设的行情
  • 晚上睡不着网站2021免费百度关键词价格排行榜
  • 找别人做网站可以提供源码吗网站备案信息被注销
  • 西安网站定制开发万网 网站
  • 晋中网站建设费用查找企业信息的网站
  • 网站排名优化首页网络建设规划
  • 网站专栏的作用怀集县住房和城乡规划建设网站
  • 超炫酷网站欣赏建设电子商务网站
  • 简述网站开发的过程营销培训心得
  • 橙色主题手机网站曲沃县建站塔山双喜
  • 泰安百度网站建设怎么修改公司网站内容
  • 大连网站设计案例国外室内设计网
  • 如何编程建设网站自己wordpress 苏醒
  • 江苏扬州建设局网站专业网站建设软件
  • 一键建站画册设计网站有哪些
  • 企业官网网站模板下载制作一个公司网站多少
  • 兰州酒店网站建设分销系统
  • 网站文章排序网站关键词怎样修改
  • 房地产类的网站建设海宁网站建设
  • 网站建设技术是干嘛的如何做商城网站小程序
  • 做网站需要学数据库吗网站建设框架模板下载