全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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<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 拦截器添加参数的实现  # 第一个  # 第二个  # 给大家  # 拦截器  # 是在  # 遍历  # 不是很  # 这是一个  # 跑到  # 希望能  # 这篇  # 有两种  # 小编  # 大家多多  # 默认值  # 后经  # 类中  # 判断是否  # 实现了  # 有两个 


相关文章: 中山网站制作网页,中山新生登记系统登记流程?  建站主机选哪家性价比最高?  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  建站之星如何开启自定义404页面避免用户流失?  建站之星导航配置指南:自助建站与SEO优化全解析  C++如何编写函数模板?(泛型编程入门)  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  大型企业网站制作流程,做网站需要注册公司吗?  制作宣传网站的软件,小红书可以宣传网站吗?  微信h5制作网站有哪些,免费微信H5页面制作工具?  建站之星备案是否影响网站上线时间?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  如何快速搭建个人网站并优化SEO?  小型网站制作HTML,*游戏网站怎么搭建?  建站主机与虚拟主机有何区别?如何选择最优方案?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  淘宝制作网站有哪些,淘宝网官网主页?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  广州营销型建站服务商推荐:技术优势与SEO优化解析  电商网站制作公司有哪些,1688网是什么意思?  如何快速搭建高效服务器建站系统?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何高效利用亚马逊云主机搭建企业网站?  制作网站的软件免费下载,免费制作app哪个平台好?  如何通过虚拟主机快速完成网站搭建?  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  如何选择CMS系统实现快速建站与SEO优化?  建站主机选择指南:服务器配置与SEO优化实战技巧  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  Bpmn 2.0的XML文件怎么画流程图  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  官网建站费用明细查询_企业建站套餐价格及收费标准指南  寿县云建站:智能SEO优化与多行业模板快速上线指南  建站主机数据库如何配置才能提升网站性能?  免费网站制作appp,免费制作app哪个平台好?  郑州企业网站制作公司,郑州招聘网站有哪些?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  制作网站的模板软件,网站怎么建设?  如何快速搭建高效可靠的建站解决方案?  网站制作需要会哪些技术,建立一个网站要花费多少?  如何获取上海专业网站定制建站电话?  常州自助建站工具推荐:低成本搭建与模板选择技巧  Python路径拼接规范_跨平台处理说明【指导】  nginx修改上传文件大小限制的方法  建站之星会员如何解锁更多建站功能? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。