MyBatis攔截器如何自動設(shè)置創(chuàng)建時間和修改時間
前言
在日常的插入和修改的時候要頻繁的插入時間,浪費時間,可以通過實現(xiàn)mybatis的 Intercepts注解來實現(xiàn),獲取實體,并且在實體里面插入日期
一、實現(xiàn)Interceptor接口,并寫相關(guān)邏輯
package com.ruoyi.common.filter;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.SecurityUtils;
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.springframework.stereotype.Component;
import java.util.Date;
import java.util.Properties;
/**
* Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) 攔截執(zhí)行器的方法
ParameterHandler (getParameterObject, setParameters) 攔截參數(shù)的處理
ResultSetHandler (handleResultSets, handleOutputParameters) 攔截結(jié)果集的處理
StatementHandler (prepare, parameterize, batch, update, query) 攔截Sql語法構(gòu)建的處理
* @author Administrator
*
*/
@Intercepts({@Signature(type = Executor.class,method = "update",args = {MappedStatement.class,Object.class})})
@Component
public class HandleTimeInterceptor implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
Object[] args = invocation.getArgs();
MappedStatement mappedStatement = (MappedStatement) args[0];
SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType();
if(sqlCommandType== SqlCommandType.UPDATE) {
if(args[1] instanceof BaseEntity) {
BaseEntity baseEntity = (BaseEntity) args[1];
baseEntity.setUpdateTime(new Date());
String userId="";
try
{
userId= SecurityUtils.getUserId().toString();
}catch (Exception e){
// throw new BaseException("當(dāng)前沒有登錄人");
}
baseEntity.setUpdateBy(userId);
}
}else if(sqlCommandType==SqlCommandType.INSERT) {
if(args[1] instanceof BaseEntity) {
BaseEntity baseEntity = (BaseEntity) args[1];
baseEntity.setCreateTime(new Date());
String userId="";
try
{
userId= SecurityUtils.getUserId().toString();
}catch (Exception e){
//throw new BaseException("當(dāng)前沒有登錄人");
}
baseEntity.setCreateBy(userId);
}
}
return invocation.proceed();
}
@Override
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}
@Override
public void setProperties(Properties properties) {
}
}
二、將插件注冊到mybatis 的配置文件 mybatis-config.xml
<?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>
<!-- 全局參數(shù) -->
<settings>
<!-- 使全局的映射器啟用或禁用緩存 -->
<setting name="cacheEnabled" value="true" />
<!-- 允許JDBC 支持自動生成主鍵 -->
<setting name="useGeneratedKeys" value="true" />
<!-- 配置默認的執(zhí)行器.SIMPLE就是普通執(zhí)行器;REUSE執(zhí)行器會重用預(yù)處理語句(prepared statements);BATCH執(zhí)行器將重用語句并執(zhí)行批量更新 -->
<setting name="defaultExecutorType" value="SIMPLE" />
<!-- 指定 MyBatis 所用日志的具體實現(xiàn) -->
<setting name="logImpl" value="SLF4J" />
<!-- 使用駝峰命名法轉(zhuǎn)換字段 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<plugins>
<plugin interceptor="com.ruoyi.common.filter.HandleTimeInterceptor"></plugin>
</plugins>
</configuration>
總結(jié)
然后就可以實現(xiàn)在實體里面自動設(shè)置創(chuàng)建時間和修改時間
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于Java中的dozer對象轉(zhuǎn)換問題
Dozer是Java?Bean到Java?Bean映射器,它以遞歸方式將數(shù)據(jù)從一個對象復(fù)制到另一個對象,這篇文章主要介紹了Java中的dozer對象轉(zhuǎn)換的操作方法,需要的朋友可以參考下2022-08-08
SpringCloud動態(tài)配置注解@RefreshScope與@Component的深度解析
在現(xiàn)代微服務(wù)架構(gòu)中,動態(tài)配置管理是一個關(guān)鍵需求,本文將為大家介紹Spring Cloud中相關(guān)的注解@RefreshScope與@Component的使用,需要的小伙伴可以參考下2025-04-04
Java實現(xiàn)InputStream的任意拷貝方式
這篇文章主要介紹了Java實現(xiàn)InputStream的任意拷貝方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
springboot yml中profiles的巧妙用法(小白必看多環(huán)境配置)
這篇文章主要介紹了springboot yml中profiles的巧妙用法,非常適合多環(huán)境配置場景,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
Spring @Bean注解的使用場景與案例實現(xiàn)
隨著SpringBoot的流行,我們現(xiàn)在更多采用基于注解式的配置從而替換掉了基于XML的配置,所以本篇文章我們主要探討基于注解的@Bean以及和其他注解的使用2023-03-03
詳解Java8與Runtime.getRuntime().availableProcessors()
這篇文章主要介紹了詳解Java8與Runtime.getRuntime().availableProcessors(),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06

