最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis攔截器:給參數(shù)對象屬性賦值的實例

 更新時間:2017年04月13日 09:51:26   投稿:jingxian  
下面小編就為大家?guī)硪黄狹yBatis攔截器:給參數(shù)對象屬性賦值的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

該攔截器的作用:在進行增加、修改等操作時,給數(shù)據(jù)模型的一些通用操作屬性(如:創(chuàng)建人、創(chuàng)建時間、修改人、修改時間等)自動賦值。

該實現(xiàn)是在DAO層攔截,即存入DB前最后一層。后經(jīng)分析,不是很合理,改為在service層攔截,用spring AOP來實現(xiàn)了,該代碼遂棄用。不過已經(jīng)測試可用,記錄備忘。

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("-----------參數(shù)攔截---------------------------------------------------");
    System.out.println("02 當(dāng)前線程ID:"+Thread.currentThread().getId());
    //遍歷處理所有參數(shù),update方法有兩個參數(shù),參見Executor類中的update()方法。
    for(int i=0;i<args.length;i++)
    {
      Object arg=args[i];
      String className=arg.getClass().getName();
      System.out.println(i + " 參數(shù)類型:"+className);
      
      //第一個參數(shù)處理。根據(jù)它判斷是否給“操作屬性”賦值。
      if(arg instanceof MappedStatement)
      {//如果是第一個參數(shù) MappedStatement
        MappedStatement ms = (MappedStatement)arg;
        SqlCommandType sqlCommandType = ms.getSqlCommandType();
        System.out.println("操作類型:"+sqlCommandType);
        if(sqlCommandType == SqlCommandType.INSERT || sqlCommandType==SqlCommandType.UPDATE)
        {//如果是“增加”或“更新”操作,則繼續(xù)進行默認操作信息賦值。否則,則退出
          continue;
        }
        else
        {
          break;
        }
      }
      
      //第二個參數(shù)處理。(只有第二個程序才能跑到這)
      if (arg instanceof Map) 
      {//如果是map,有兩種情況:(1)使用@Param多參數(shù)傳入,由Mybatis包裝成map。(2)原始傳入Map
        System.out.println("這是一個包裝過的類型!");
        Map map=(Map)arg;
        for (Object obj : map.values()) 
        { 
          setProperty(obj);
        } 
      }
      else
      {//原始參數(shù)傳入
        setProperty(arg);
      }
      
    }

    return invocation.proceed();

  }
  
  /**
   * 為對象的操作屬性賦值
   * @param obj
   */
  private void setProperty(Object obj)
  {
    try
    {
      //TODO: 根據(jù)需要,將相關(guān)屬性賦上默認值
      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攔截器:給參數(shù)對象屬性賦值的實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring Boot 添加MySQL數(shù)據(jù)庫及JPA實例

    Spring Boot 添加MySQL數(shù)據(jù)庫及JPA實例

    本篇文章主要介紹了Spring Boot 添加MySQL數(shù)據(jù)庫及JPA,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • JDBC示例代碼

    JDBC示例代碼

    本教程提供了如何創(chuàng)建一個簡單的JDBC應(yīng)用程序的示例。演示如何打開一個數(shù)據(jù)庫連接,執(zhí)行SQL查詢,并顯示結(jié)果
    2014-03-03
  • Java main方法String[]args原理實例解析

    Java main方法String[]args原理實例解析

    這篇文章主要介紹了Java main方法String[]args原理實例解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • 深入理解Java中的字符串類型

    深入理解Java中的字符串類型

    這篇文章主要介紹了Java中的字符串類型,需要的朋友可以參考下
    2014-02-02
  • Java實現(xiàn)輕松處理日期和時間的API小結(jié)

    Java實現(xiàn)輕松處理日期和時間的API小結(jié)

    這篇文章主要為大家詳細介紹了Java中的日期和時間API,可以輕松處理日期和時間,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • Java CompletableFuture 異步超時實現(xiàn)深入研究

    Java CompletableFuture 異步超時實現(xiàn)深入研究

    這篇文章主要為大家介紹了Java CompletableFuture 異步超時實現(xiàn)深入研究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 使用@DS輕松解決動態(tài)數(shù)據(jù)源的問題

    使用@DS輕松解決動態(tài)數(shù)據(jù)源的問題

    這篇文章主要介紹了使用@DS輕松解決動態(tài)數(shù)據(jù)源的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • springcloud整合seata的實現(xiàn)代碼

    springcloud整合seata的實現(xiàn)代碼

    這篇文章主要介紹了springcloud整合seata的實現(xiàn)方法,整合步驟通過引入spring-cloud-starter-alibaba-seata?jar包,文中結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • 輕松掌握Java觀察者模式

    輕松掌握Java觀察者模式

    這篇文章主要幫助大家輕松掌握Java觀察者模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Spring整合JPA與Hibernate流程詳解

    Spring整合JPA與Hibernate流程詳解

    這篇文章主要介紹了Spring整合Hibernate與JPA,在正式進入Hibernate的高級應(yīng)用之前,需要了解聲明是數(shù)據(jù)模型與領(lǐng)域模型,這兩個概念將會幫助我們更好的理解實體對象的關(guān)聯(lián)關(guān)系映射
    2023-01-01

最新評論

金门县| 黔西| 高邮市| 滨海县| 屯留县| 江津市| 阿坝| 永春县| 温宿县| 元江| 江城| 都昌县| 贵州省| 明星| 喀喇| 旅游| 金昌市| 南靖县| 贵阳市| 西安市| 永年县| 汪清县| 齐齐哈尔市| 大港区| 和林格尔县| 临邑县| 莲花县| 康平县| 德令哈市| 永仁县| 武威市| 潼南县| 蒙城县| 乌兰浩特市| 丰镇市| 吴旗县| 岐山县| 济阳县| 汉沽区| 太康县| 夏邑县|