MyBatis拦截器:给参数对象属性赋值的实例
程序员文章站
2024-02-29 17:35:34
该拦截器的作用:在进行增加、修改等操作时,给数据模型的一些通用操作属性(如:创建人、创建时间、修改人、修改时间等)自动赋值。
该实现是在dao层拦截,即存入db前最后一层...
该拦截器的作用:在进行增加、修改等操作时,给数据模型的一些通用操作属性(如:创建人、创建时间、修改人、修改时间等)自动赋值。
该实现是在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<args.length;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拦截器:给参数对象属性赋值的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
推荐阅读
-
MyBatis拦截器:给参数对象属性赋值的实例
-
Mybatis和orcale update语句中接收参数为对象的实例代码
-
Mybatis和orcale update语句中接收参数为对象的实例代码
-
【Vue2+Vue3】props参数赋值给data属性【如何实现响应式变化-如何解决值传递无法响应式的问题】
-
vue给对象动态添加属性和值的实例
-
解决vue A对象赋值给B对象,修改B属性会影响到A的问题
-
Java 遍历一个对象的属性 将非空属性赋值给另一个对象
-
java 对象属性复制,将一个对象的属性值赋值给另一个对象, 属性名需要相同
-
将一个对象相同的属性(不区分大小写)赋值给一个新对象
-
vue给对象动态添加属性和值的实例