首页 > 其他分享 >springboot~mybatis统一处理公有字段

springboot~mybatis统一处理公有字段

时间:2024-04-08 13:11:43浏览次数:26  
标签:springboot entity sessionFactory typeAliasesPackage mybatis new 公有 class

对于实体中包含有公共字段,像create_at,create_time,update_at,update_time来说,我们没有必要在每个实体的crud操作中复制同样的代码,这样代码的味道很坏,我们应该使用mybatis的拦截器机制,将公共字段统一处理;当然mybatis-puls在实现上更加优雅,它帮我们封装了MetaObjectHandler接口,我们可以重写insertFillupdateFill来完成公共字段的统一填充,详细可看我这篇文章《springboot~MyBatisPlus中使用@TableField完成字段自动填充》。

mybatis中的实现

  • 需要实现org.apache.ibatis.plugin.Interceptor接口

  • 在intercept方法中实现业务核心逻辑

  • 在SqlSessionFactory中注册你的intercept类

  • 拦截器代码

@Intercepts({ @Signature(type = Executor.class, method = "update", args = { MappedStatement.class, Object.class }) })
public class FillCreateAndUpdateFieldInterceptor implements Interceptor {

	static final Logger logger = LoggerFactory.getLogger(FillCreateAndUpdateFieldInterceptor.class);

	@Override
	public Object intercept(Invocation invocation) throws Throwable {
		Object[] args = invocation.getArgs();
		MappedStatement ms = (MappedStatement) args[0];
		Object parameter = args[1];
		if (ms.getId().contains("insert") || ms.getId().contains("update")) {
			if (SecurityUtils.getAuthentication() != null) {

				if (parameter instanceof BaseEntity) {
					BaseEntity entity = (BaseEntity) parameter;
					if (ms.getId().contains("insert")) {
						entity.setCreateBy(SecurityUtils.getAuthentication().getName());
						entity.setCreateTime(new Date());
					}
					entity.setUpdateBy(SecurityUtils.getAuthentication().getName());
					entity.setUpdateTime(new Date());

				}
		 }
	}
}
  • 自定义SqlSessionFactory的bean
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
	String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage");
	String mapperLocations = env.getProperty("mybatis.mapperLocations");
	String configLocation = env.getProperty("mybatis.configLocation");
	typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
	VFS.addImplClass(SpringBootVFS.class);

	final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
	sessionFactory.setDataSource(dataSource);
	sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
	sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));
	sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
	SqlSessionFactory result = sessionFactory.getObject();

	// 注册自定义拦截器
	result.getConfiguration().addInterceptor(new FillCreateAndUpdateFieldInterceptor());
	return result;
}

通过上面的代码,我们就完成了公共字段的统一处理。

标签:springboot,entity,sessionFactory,typeAliasesPackage,mybatis,new,公有,class
From: https://www.cnblogs.com/lori/p/18120902

相关文章

  • 基于springboot+vue+Mysql的学习平台
    开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9系统展示平台首页用户注册课程信息作业信息资料信息个人中心管理员功能界面学生管理教师管理课程......
  • 基于Java+SpringBoot+Vue的SRM供应商系统(源码分享)
           前言:供应商招投标管理系统是一个综合性的管理平台,旨在规范供应商的招投标流程,确保采购过程的透明度和公正性,同时提高采购效率。以下是对您提到的各个环节的详细解释:一、供应商准入供应商准入是招投标管理系统的首要环节,它负责审核和管理潜在供应商的资质。具......
  • 计算机毕业设计项目:springboot 智能答疑系统 96852(开题答辩+程序定制+全套文案 )上万套
    毕业论文(设计) 题   目springboot智能答疑系统学   院       XXXXX     专业班级   XXXXX学生姓名       XXXX    指导教师            XXXX          撰写日期:202 年 月 日目 录摘要......
  • springboot与springcloud版本关系,BeanCreationException Error creating bean with n
    添加注解@EnableFeignClients后报错:org.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'configurationPropertiesBeans'definedinclasspathresource[org/springframework/cloud/autoconfigure/ConfigurationPropertiesRebi......
  • springboot 与jdk与maven与gradle 对应版本
      SystemRequirementsSpringBoot3.2.4requires Java17 andiscompatibleuptoandincludingJava22. SpringFramework6.1.5 oraboveisalsorequired.Explicitbuildsupportisprovidedforthefollowingbuildtools:BuildToolVersionMa......
  • 21.SpringBoot项目_员工管理系统总结 中
    数据库层的准备首先首先用到mysql和mybatis1.依赖<!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--数据层-->......
  • Springboot计算机毕业设计橙心优购微信小程序的设计与实现【附源码】开题+论文+mysql+
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着移动互联网的快速发展和普及,微信小程序作为一种新兴的移动应用形态,受到了广大用户的青睐。微信小程序不仅具备即用即走、无需安装的特点,而且能够......
  • Springboot计算机毕业设计宠物领养与物品捐赠小程序【附源码】开题+论文+mysql+程序+
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着人们生活质量的提升,越来越多的人选择宠物作为生活中的伴侣。然而,宠物数量的增长也带来了一系列问题,如流浪宠物数量的增加、宠物养护知识的缺乏等......
  • SpringBoot热部署
    SpringBoot热部署方便开发环境热部署就是不需要停掉服务使修改的代码生效;原来的服务器是独立的,通过配置加载当前运行的项目,现在是内置的,受SpringBoot管控,是SpringBoot的一部分,不能感知到程序的变化了,所以使用一个工具,在spring容器中操作,监控tomcat容器的变化启动热部署的工具......
  • SpringBoot中的Tomcat(内嵌式)使用及分析
    前言Tomcat是我们在项目中使用最多的Web应用服务器,今天通过代码来简单分析下SpringBoot中是如何启动内嵌式Tomcat的。使用importjava.io.File;importjava.io.IOException;importjava.nio.charset.StandardCharsets;importjava.util.HashSet;importjava.util.Se......