mybatis Interceptor对UpdateTime自动处理的实现方法
作者:三不猴 发布时间:2023-10-13 16:02:20
标签:mybatis,interceptor,updatetime
前言
一般数据库的表结构都会有update_time,修改时间,因为这个字段基本与业务没有太大关联,因此开发过程中经常会忘记设置这两个字段的值,本插件就是来解决这个问题。同样的想生成id,create_time等操作都是可以以同样的方式解决。想折腾的同学还可以通过这中方式自己写个分页插件。
闲话少说上代码。
1. 先写一个自定义注解标注是update_time
package com.zb.iscrm.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @Auther: 杨红星
* @Date: 2018/11/28 09:38
* @Description:
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface UpdateTime {
String value() default "";
}
2. 写一个mybatis插件
使用@Intercepts标注这是个mybatis插件,@Signature标注要拦截的操作
package com.zb.iscrm.mybatisInterceptor;
import com.zb.iscrm.annotation.UpdateTime;
import com.zb.iscrm.utils.DateUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlCommandType;
import org.apache.ibatis.plugin.*;
import java.lang.reflect.Field;
import java.util.Properties;
/**
* @Auther: 杨红星
* @Date: 2018/11/28 09:41
* @Description: mybatis插件 用于执行Update时将当前时间加入
*/
@Slf4j
@Intercepts({ @Signature(type = Executor.class, method = "update", args = { MappedStatement.class, Object.class }) })
public class UpdateTimeInterceptor implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
// 获取 SQL 命令
SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType();
// 获取参数
Object parameter = invocation.getArgs()[1];
if (parameter != null) {
// 获取成员变量
Field[] declaredFields = parameter.getClass().getDeclaredFields();
for (Field field : declaredFields) {
if (field.getAnnotation(UpdateTime.class) != null) { // update 语句插入 updateTime
if (SqlCommandType.INSERT.equals(sqlCommandType) || SqlCommandType.UPDATE.equals(sqlCommandType)) {
field.setAccessible(true);
if (field.get(parameter) == null) {
field.set(parameter, DateUtils.dateTimeNow(DateUtils.YYYY_MM_DD_HH_MM_SS));
}
}
}
}
}
//同样的方式也可以在这里添加create_time或者是id的生成等处理
return invocation.proceed();
}
@Override
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}
@Override
public void setProperties(Properties properties) {
}
}
最后在mybatis的配置文件中注册插件,然后就大功告成
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--插件注册-->
<plugins>
<plugin interceptor="com.zb.iscrm.mybatisInterceptor.UpdateTimeInterceptor"/>
</plugins>
</configuration>
来源:https://juejin.im/post/5c036bf4f265da61524d23a3


猜你喜欢
- Java连接SQLServer 2008数据库的步骤:1.到微软官方下载jdbc 并解压,得到sqljdbc.jar和sqljdbc4.ja
- UI设计:实验目的:自主完成一个简单APP的设计工作,综合应用已经学到的Android UI设计技巧,重点注意合理使用布局。实验要求:1.完
- 目录时间轴是前端UI经常用到的效果,先看下效果图:实现一、借助 Container 中 decoration 属性,设置左侧的 border
- 进程间图怎么传递图形buffer写这篇文章的目的:讲解 进程间图怎么传递图形buffer的最近研究图形缓存怎么在进程之间传递的,谷歌了所有的
- 作为Android的四大组件之一,ContentProvider作为进程之间静态数据传递的重要手段,其在系统级别的应用中起了重大的作用。毫无
- SpringBoot启动自动终止也不报错Error starting ApplicationContext. To display the
- Java开发中使用IDE工具肯定会很大程度的提高开发效率,但是有时候需要用java命令在服务器上启动Java工程代码来完成一系列的功能 ,当
- 本文实例为大家分享了C#实现控制台飞行棋小游戏的具体代码,供大家参考,具体内容如下using System;using System.Col
- 本文实例讲述了C#实现基于XML配置MenuStrip菜单的方法。分享给大家供大家参考。具体如下:1.关于本程序的说明用XML配置MenuS
- 前言相信大家在java中用到的最多的时间类莫过于 java.util.Date了,由于Date类中将getYear() , getMonth
- 一、项目运行环境配置:Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,
- 首先给大家展示下效果图,感觉还不错,请继续往下阅读:下拉刷新: 上划加载 &n
- 一、实验:继承1、概念Maven工程之间,A 工程继承 B 工程B 工程:父工程A 工程:子工程本质上是 A 工程的 pom.xml 中的配
- 配置详情pom.xmldependency> <groupId>com.baomidou<
- 一、连接客户端原理流程图二、功能要求1)连接成功后,可以将服务器发来的消息不停地显示在 listbox 中;2) 客户端要发给服务器的数据,
- 在初始化自己位置的时候请求定位权限:Constants.ACCESS_FINE_LOCATION_COMMANDS_REQUEST_CODE
- RenderScript 介绍在开始之前,先看下 RenderScript 的官方介绍:RenderScript is a framewor
- 在idea下新建一个maven项目,在学习mybaties时跟着视频教程添加依赖发现可以配置maven然后自动导入,这样可以省事不用手写。前
- 实体类时间格式化java 实体类 时间格式化注解@JsonFormat(pattern = "yyyy-MM-dd HH:mm:s
- 脚本之家在以前介绍过关于C#创建、部署、调用WebService的教程,有兴趣的可以参阅:.NET C#创建WebService服务简单实例