java类向拦截器传值_MyBatis拦截器:给参数对象属性赋值的实例
該攔截器的作用:在進行增加、修改等操作時,給數據模型的一些通用操作屬性(如:創建人、創建時間、修改人、修改時間等)自動賦值。
該實現是在dao層攔截,即存入db前最后一層。后經分析,不是很合理,改為在service層攔截,用spring aop來實現了,該代碼遂棄用。不過已經測試可用,記錄備忘。
package com.development;
import java.lang.reflect.invocationtargetexception;
import java.util.date;
import java.util.map;
import java.util.properties;
import org.apache.commons.beanutils.beanutils;
import org.apache.ibatis.executor.executor;
import org.apache.ibatis.mapping.mappedstatement;
import org.apache.ibatis.mapping.sqlcommandtype;
import org.apache.ibatis.plugin.interceptor;
import org.apache.ibatis.plugin.intercepts;
import org.apache.ibatis.plugin.invocation;
import org.apache.ibatis.plugin.plugin;
import org.apache.ibatis.plugin.signature;
/**
* 攔截器作用:給各實體對象在增加、修改時,自動添加操作屬性信息。
*/
@intercepts({@signature(type = executor.class, method = "update", args = {mappedstatement.class, object.class }) })
public class opeinfointerceptor implements interceptor
{
public object intercept(invocation invocation) throws throwable
{
object[] args = invocation.getargs();
system.out.println("-----------參數攔截---------------------------------------------------");
system.out.println("02 當前線程id:"+thread.currentthread().getid());
//遍歷處理所有參數,update方法有兩個參數,參見executor類中的update()方法。
for(int i=0;i
{
object arg=args[i];
string classname=arg.getclass().getname();
system.out.println(i + " 參數類型:"+classname);
//第一個參數處理。根據它判斷是否給“操作屬性”賦值。
if(arg instanceof mappedstatement)
{//如果是第一個參數 mappedstatement
mappedstatement ms = (mappedstatement)arg;
sqlcommandtype sqlcommandtype = ms.getsqlcommandtype();
system.out.println("操作類型:"+sqlcommandtype);
if(sqlcommandtype == sqlcommandtype.insert || sqlcommandtype==sqlcommandtype.update)
{//如果是“增加”或“更新”操作,則繼續進行默認操作信息賦值。否則,則退出
continue;
}
else
{
break;
}
}
//第二個參數處理。(只有第二個程序才能跑到這)
if (arg instanceof map)
{//如果是map,有兩種情況:(1)使用@param多參數傳入,由mybatis包裝成map。(2)原始傳入map
system.out.println("這是一個包裝過的類型!");
map map=(map)arg;
for (object obj : map.values())
{
setproperty(obj);
}
}
else
{//原始參數傳入
setproperty(arg);
}
}
return invocation.proceed();
}
/**
* 為對象的操作屬性賦值
* @param obj
*/
private void setproperty(object obj)
{
try
{
//todo: 根據需要,將相關屬性賦上默認值
beanutils.setproperty(obj, "createrusername", "張三");
beanutils.setproperty(obj, "createdt", new date());
}
catch (illegalaccessexception e)
{
e.printstacktrace();
}
catch (invocationtargetexception e)
{
e.printstacktrace();
}
}
public object plugin(object target)
{
return plugin.wrap(target, this);
}
public void setproperties(properties properties)
{
}
}
以上這篇mybatis攔截器:給參數對象屬性賦值的實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持萬仟網。
希望與廣大網友互動??
點此進行留言吧!
總結
以上是生活随笔為你收集整理的java类向拦截器传值_MyBatis拦截器:给参数对象属性赋值的实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三亚一宝马车倒车失误 众目睽睽之下不慎掉
- 下一篇: 苹果 iPhone 15 Pro 前玻璃