日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java类向拦截器传值_MyBatis拦截器:给参数对象属性赋值的实例

發布時間:2023/12/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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拦截器:给参数对象属性赋值的实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。