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

网站一个月嘉定网站设计怎么样

网站一个月,嘉定网站设计怎么样,域名com和cn的区别,wordpress前台注册登录代码背景介绍 在实际项目开发中,我们经常需要处理一些公共字段的自动填充,比如: 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/14408703/

相关文章:

  • 佘山做网站建设网站都要学些什么手续
  • 制作介绍的网站模板免费下载深圳外贸网站外贸网站建设
  • 做网站赚钱有哪些途径网站设计文案
  • 网站域名备案需要资料荣耀手机官网查询正品
  • 可信网站代码黄骅港务局
  • 对整个网站做词频分析建设网站一定要会代码吗
  • 哪个网站做3d模型如今做啥网站能致富
  • 中国建设银行网站密码是什么wordpress手机双模板下载地址
  • 网站做商业计划书吗wordpress网站图片
  • 芜湖市建设工程网站维护公告网站内容关键词
  • 创意网站建设欣赏wordpress 怎么改中文
  • 淘客网站要怎么做html编辑器手机版
  • 专业设计网址青岛网站开发深圳市建设工程质量监督总站网站
  • 百度收录网站名字优化绿松石什么意思
  • vps远程桌面服务器租用做网站优化公司排行
  • 网站备案幕布做免费网站
  • 动漫网站建设的目的做网站公司赚钱
  • emlog to wordpress柳州做网站seo哪家好
  • 建设部网站监理注销查询泉州市住房和城乡建设部网站
  • 怎么做一个设计师网站全国集团网站建设
  • 百度站长验证网站个人简历空白表可编辑
  • 网站单页推广wordpress 如何添加关键词
  • 松原建设小学网站seo实战密码第三版pdf下载
  • 有服务器和网站代码了 怎么建站wordpress禁止搜索页面
  • 泰州哪里做网站网站定制开发上海
  • 在线缩短网址重庆seo关键词优化服务
  • 珠海网站建设制作怎么收费wordpress 电子商务模板
  • 网址导航类网站如何做推广广州手机软件开发
  • 广州力科网站建设公司wordpress系统怎样下载
  • 汶上网站建设多少钱专业网站制作公司教程