MyBatis攔截器如何自動(dòng)設(shè)置創(chuàng)建時(shí)間和修改時(shí)間
前言
在日常的插入和修改的時(shí)候要頻繁的插入時(shí)間,浪費(fèi)時(shí)間,可以通過實(shí)現(xiàn)mybatis的 Intercepts注解來實(shí)現(xiàn),獲取實(shí)體,并且在實(shí)體里面插入日期
一、實(shí)現(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) {
}
}
二、將插件注冊(cè)到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 支持自動(dòng)生成主鍵 -->
<setting name="useGeneratedKeys" value="true" />
<!-- 配置默認(rèn)的執(zhí)行器.SIMPLE就是普通執(zhí)行器;REUSE執(zhí)行器會(huì)重用預(yù)處理語句(prepared statements);BATCH執(zhí)行器將重用語句并執(zhí)行批量更新 -->
<setting name="defaultExecutorType" value="SIMPLE" />
<!-- 指定 MyBatis 所用日志的具體實(shí)現(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é)
然后就可以實(shí)現(xiàn)在實(shí)體里面自動(dòng)設(shè)置創(chuàng)建時(shí)間和修改時(shí)間
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)學(xué)生選課管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)學(xué)生選課管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
SpringBoot?整合mybatis+mybatis-plus的詳細(xì)步驟
這篇文章主要介紹了SpringBoot?整合mybatis+mybatis-plus的步驟,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
新版SpringBoot無法主動(dòng)讀取bootstrap.yml的原因和解決方法
在使用新版 Springboot 搭建微服務(wù)時(shí) 發(fā)現(xiàn)配置數(shù)據(jù)源失敗,依賴、配置、注解等所示所有均為正確,所以本文給大家介紹了新版SpringBoot無法主動(dòng)讀取bootstrap.yml的原因和解決方案,需要的朋友可以參考下2025-01-01
java隨機(jī)抽取指定范圍不重復(fù)的數(shù)字
這篇文章主要介紹了java隨機(jī)抽取指定范圍不重復(fù)的數(shù)字的相關(guān)資料,需要的朋友可以參考下2016-06-06
Java volatile的適用場(chǎng)景實(shí)例詳解
在本文里我們給大家整理了一篇關(guān)于Java volatile的適用場(chǎng)景實(shí)例內(nèi)容和知識(shí)點(diǎn),需要的朋友們可以學(xué)習(xí)下。2019-08-08
idea如何在service窗口中顯示多個(gè)服務(wù)
這篇文章主要介紹了idea如何在service窗口中顯示多個(gè)服務(wù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
springboot集成springsecurity 使用OAUTH2做權(quán)限管理的教程
這篇文章主要介紹了springboot集成springsecurity 使用OAUTH2做權(quán)限管理的教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12

