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

做网站时候图片和视频放在哪里湖南免费网站建设

做网站时候图片和视频放在哪里,湖南免费网站建设,做五金行业的外贸网站,西部数码网站管理助手 ftp上传文件失败功能:在新增护理项目的时候,创建人,创建时间和修改时间字段会自动拦截填充,这些公共字段可以省去我们一个一个处理的麻烦依靠:AutoFillInterceptor拦截器,MybatisConfig配置类第一步:我们需要借助一个MybatisConfig,configuration标志着这是一个配置类,我们需要将autoFillInter…

功能:在新增护理项目的时候,创建人,创建时间和修改时间字段会自动拦截填充,这些公共字段可以省去我们一个一个处理的麻烦

依靠:AutoFillInterceptor拦截器,MybatisConfig配置类

第一步:我们需要借助一个MybatisConfig,@configuration标志着这是一个配置类,我们需要将autoFillInterceptor放在配置类中并用@Bean注解将这个配置类交给spring容器gu

第二步:了解配置类的原理,也就是AutoFillInterceptor,这个拦截器的代码大部分是固定的我用只需要了解它的逻辑,在需要的时候复制代码并根据需求修改

package com.zzyl.intercept;// 引入工具类和依赖
import cn.hutool.core.util.ObjectUtil;
import com.zzyl.utils.EmptyUtil;
import com.zzyl.utils.UserThreadLocal;
import org.apache.ibatis.binding.MapperMethod;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlCommandType;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.SystemMetaObject;
import org.springframework.stereotype.Component;import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Properties;// 声明这是一个MyBatis拦截器,拦截Executor的update方法
@Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})
})
@Component // 声明为Spring组件
public class AutoFillInterceptor implements Interceptor {// 常量定义:字段名private static final String CREATE_BY = "createBy";   // 创建人字段名private static final String UPDATE_BY = "updateBy";   // 更新人字段名private static final String CREATE_TIME = "createTime"; // 创建时间字段名private static final String UPDATE_TIME = "updateTime"; // 更新时间字段名// 拦截逻辑核心方法@Overridepublic Object intercept(Invocation invocation) throws Throwable {// 获取方法参数:MappedStatement和SQL参数对象Object[] args = invocation.getArgs();MappedStatement ms = (MappedStatement) args[0];  // 获取SQL映射信息SqlCommandType sqlCommandType = ms.getSqlCommandType(); // 获取SQL操作类型(INSERT/UPDATE等)Object parameter = args[1];  // 获取SQL参数对象// 仅当参数和SQL类型有效时处理if (parameter != null && sqlCommandType != null) {Long userId = loadUserId();  // 获取当前用户ID(从ThreadLocal)// 处理INSERT操作if (SqlCommandType.INSERT.equals(sqlCommandType)) {// 批量插入场景(参数是ParamMap且包含list字段)if (parameter instanceof MapperMethod.ParamMap) {MapperMethod.ParamMap paramMap = (MapperMethod.ParamMap) parameter;ArrayList list = (ArrayList) paramMap.get("list"); // 获取批量数据列表list.forEach(v -> {// 为每条数据设置创建人、创建时间、更新时间setFieldValByName(CREATE_BY, userId, v);setFieldValByName(CREATE_TIME, LocalDateTime.now(), v);setFieldValByName(UPDATE_TIME, LocalDateTime.now(), v);});paramMap.put("list", list); // 更新修改后的参数} else {// 单条插入场景setFieldValByName(CREATE_BY, userId, parameter);setFieldValByName(CREATE_TIME, LocalDateTime.now(), parameter);setFieldValByName(UPDATE_TIME, LocalDateTime.now(), parameter);}} // 处理UPDATE操作else if (SqlCommandType.UPDATE.equals(sqlCommandType)) {// 设置更新人和更新时间setFieldValByName(UPDATE_BY, userId, parameter);setFieldValByName(UPDATE_TIME, LocalDateTime.now(), parameter);}}// 继续执行原始SQL操作return invocation.proceed();}/*** 通过反射设置实体对象的字段值* @param fieldName  字段名(如createBy)* @param fieldVal   字段值(如用户ID)* @param parameter  实体对象*/private void setFieldValByName(String fieldName, Object fieldVal, Object parameter) {// 使用MyBatis的MetaObject操作对象属性MetaObject metaObject = SystemMetaObject.forObject(parameter);// 如果是createBy字段且已有值,则跳过(避免覆盖)if (fieldName.equals(CREATE_BY)) {Object value = metaObject.getValue(fieldName);if (ObjectUtil.isNotEmpty(value)) {return;}}// 如果字段存在setter方法,则设置值if (metaObject.hasSetter(fieldName)) {metaObject.setValue(fieldName, fieldVal);}}// 包装目标对象(Executor),返回代理对象@Overridepublic Object plugin(Object target) {if (target instanceof Executor) {return Plugin.wrap(target, this); // MyBatis提供的包装方法}return target; // 非Executor类型直接返回}// 可读取配置文件属性(本例未使用)@Overridepublic void setProperties(Properties properties) {}/*** 获取当前用户ID(优先级:ThreadLocal用户ID → 管理用户ID → 默认值1)*/public static Long loadUserId() {Long userId = UserThreadLocal.getUserId(); // 从业务线程获取if (ObjectUtil.isNotEmpty(userId)) {return userId;}userId = UserThreadLocal.getMgtUserId(); // 从管理线程获取if (!EmptyUtil.isNullOrEmpty(userId)) {return userId;}return 1L; // 默认值}
}

http://www.dtcms.com/a/510283.html

相关文章:

  • 更改网站主题中国建设银行网站-个人客
  • 福永网站建设多少钱推荐网站空间购买
  • 视频解析接口网站怎么做营销型网站建设需要有什么功能
  • 公众号开发者刷新数据丢失通辽网站seo
  • 国内知名网站建设公司seo学院
  • 网站负责人 主体负责人什么网站可以做简历模板
  • 永久免费手机建站平台2022年网络流行语
  • 如何建立一个网站的快捷方式网站建设seo优化价格
  • 山东省建设教育集团网站首页白杨seo
  • 网站优化目的百度排名怎么做
  • 如何注册网站免费注册wordpress 外网访问
  • 一级域名和二级域名做两个网站网站开发公司的义务
  • dede手机网站建设教程中国建设银行网站签名通下载
  • vps 做网站珠海网站开发
  • 个人可以做几个网站吗刚刚发生了什么大事
  • 做拍卖的网站有哪些推广网站平台免费
  • 网站流量利用浙江建设职业继续教育学院网站
  • 提供网站建设方案服务动漫设计专业哪个学校比较好
  • 青岛做网站建设代做效果图的网站
  • 网站设计与应用方向论文泉州做网站多少钱
  • 怎么给设计网站推广成都网站建设排名
  • 临沂网站seo南京seo推广
  • 阿里云注册网站之后怎么做网站天元建设集团有限公司 天眼查
  • 胶南建网站现在 做网站 技术路线
  • 湖北网站建设服装设计网站模板
  • [ 1500元做网站_验收满意再付款! ]_沛县网络公司cd.wordpress.ncn
  • 烟台建设协会网站太原小程序制作电话
  • 北京网站设计浩森宇特网站建设的公司怎么做
  • 几十万做网站平台兰州网络推广专员
  • 青海公路工程建设市场信用信息服务网站建站软件2017