springboot~mybatis统一处理公有字段

这篇具有很好参考价值的文章主要介绍了springboot~mybatis统一处理公有字段。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

对于实体中包含有公共字段,像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;
}

通过上面的代码,我们就完成了公共字段的统一处理。文章来源地址https://www.toymoban.com/news/detail-844196.html

到了这里,关于springboot~mybatis统一处理公有字段的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MyBatis: 向oracle表中插入null字段的处理

    一、可以在SQL中指定类型: 二、可以进行全局配置(单独使用MyBatis时可如下配置) 如果不进行配置,将报错

    2024年02月09日
    浏览(40)
  • SpringBoot统一异常处理和统一返回格式

    上篇博客我们讲解了使用AOP来进行统一的用户登录判断,其实像这种功能统一且使用较多的地方,都可以用AOP来处理,除了统⼀的⽤户登录判断之外,AOP 还可以实现: 统⼀⽇志记录 统⼀⽅法执⾏时间统计 (在性能优化阶段,监控流量,接口的响应时间等甚至每个方法的响应

    2024年02月15日
    浏览(35)
  • SpringBoot - MyBatis-Plus - 如何在查询时排除某些字段?

    写在前面 查询时部分字段不想给前端显示,怎么办? (1)使用SELECT方法,排除字段\\\"password\\\" (2)使用SELECT方法,只显示某些字段 (3)使用@TableField(exist = false),排除某些字段 注:表示当前属性不是数据库的字段,但在项目中必须使用,这样的话在新增/查询等使用BEAN时,

    2024年02月12日
    浏览(43)
  • SpringBoot 统一功能的处理

    1.1 最初用户登录验证 从上述代码中可以看出每个方法都相同的登录权限校验 , 这样做的缺点是: 每个方法中都要单独写用户登录验证的方法 , 即使封装成公共方法 , 也一样要在方法中传参判断. 添加控制器越多, 调用用户登录的方法也越多 , 这样后期会增大维护成本. 用户登录

    2024年02月16日
    浏览(33)
  • springboot 参数统一处理

    目录 一、普通参数:ParameterRequestWrapper 二、HttpHelper请求处理字符串工具类 三、实体json参数:RequestWrapper 四、过滤器:PostFilter 五、Controller 一、普通参数:ParameterRequestWrapper import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import java.util.Enumeration; impor

    2024年02月01日
    浏览(28)
  • SpringBoot—统一功能处理

    利用 AOP 的思想对一些特定的功能进行统一的处理, 包括 使用拦截器实现用户登录权限的统一校验 统一异常的处理 统一数据格式的返回 通过一级路由调用多种方法, 需要保证这些方法的请求类型各不相同(GET, POST, PUT…) 使用 Spring AOP 可以实现统一拦截, 但 Spring AOP 的使用较为

    2024年02月13日
    浏览(32)
  • springboot全局统一返回处理

    项目中一般都会有规定好的接口返回格式,无论成功与失败,一般格式都是不变的,这样是为了方便前后端统一处理,今天就来说下前后端统一处理的较为优雅的方式; 一般而言都会有一个统一的返回类作为接口的返回数据的封装,例如: 然后我们通过此类作为返回参数的统一封装

    2024年02月13日
    浏览(38)
  • SpringBoot统一功能的处理

    目录 SpringBoot拦截器 自定义拦截器 将自定义拦截器加入系统配置项 统一异常处理 创建异常处理类  实现业务方法 统一数据返回格式 为什么需要统一数据返回格式 统一数据返回格式的实现 返回String时的报错愿意及处理方案 使用SpringBoot拦截器来实现用户登录权限的校验. 如

    2024年02月08日
    浏览(69)
  • springboot的统一处理

    在处理网络请求时,有一部分功能是需要抽出来统一处理的,与业务隔开。 可以利用spring mvc的拦截器Interceptor,实现HandlerInterceptor接口即可。实现该接口后,会在把请求发给Controller之前进行拦截处理。 拦截器的实现分为以下两个步骤: 创建⾃定义拦截器,实现 HandlerInterc

    2023年04月08日
    浏览(29)
  • SpringBoot 统一功能处理

    登录、注册页面不拦截,其他页面都拦截 当登录成功写入 session 之后,拦截的页面可正常访问 调用顺序: 正常情况下,程序会在调用 Controller 之前进行相应的业务处理(我们在切面中定义的事务),业务通过后,才会调用Controller 层,然后就是Controller - Serrvice - Mapper - 数据

    2024年01月24日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包