前言
在日常的插入和修改的时候要频繁的插入时间,浪费时间,可以通过实现mybatis的 intercepts注解来实现,获取实体,并且在实体里面插入日期
一、实现interceptor接口,并写相关逻辑
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) 拦截执行器的方法 parameterhandler (getparameterobject, setparameters) 拦截参数的处理 resultsethandler (handleresultsets, handleoutputparameters) 拦截结果集的处理 statementhandler (prepare, parameterize, batch, update, query) 拦截sql语法构建的处理 * @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("当前没有登录人"); } 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("当前没有登录人"); } 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> <!-- 全局参数 --> <settings> <!-- 使全局的映射器启用或禁用缓存 --> <setting name="cacheenabled" value="true" /> <!-- 允许jdbc 支持自动生成主键 --> <setting name="usegeneratedkeys" value="true" /> <!-- 配置默认的执行器.simple就是普通执行器;reuse执行器会重用预处理语句(prepared statements);batch执行器将重用语句并执行批量更新 --> <setting name="defaultexecutortype" value="simple" /> <!-- 指定 mybatis 所用日志的具体实现 --> <setting name="logimpl" value="slf4j" /> <!-- 使用驼峰命名法转换字段 --> <setting name="mapunderscoretocamelcase" value="true"/> </settings> <plugins> <plugin interceptor="com.ruoyi.common.filter.handletimeinterceptor"></plugin> </plugins> </configuration>
总结
然后就可以实现在实体里面自动设置创建时间和修改时间
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论