1. 程式人生 > 其它 >Mybatis 之 外掛

Mybatis 之 外掛

外掛編寫(plugin)

步驟:

1. 編寫Interceptor的實現類:

MyFirstPlug

2. 使用@Intercepts註解完成外掛簽名

3. 將寫好的外掛註冊到全域性配置檔案中

package com.feng.config;

import org.apache.ibatis.executor.statement.StatementHandler;
import org.apache.ibatis.plugin.*;

import java.util.Properties;

/**
 * @Desc:完成外掛簽名:
 *        告訴mybatis當前外掛用來攔截哪個物件的哪個方法
 * @Param: Sinature type:攔截哪個物件(四大物件)
 *                  method:物件的哪個方法
 *                  args: 當前方法的引數列表
 */
@Intercepts({
        @Signature(type = StatementHandler.class, method = "parameterize", args = java.sql.Statement.class)
})
public class MyFirstPlug implements Interceptor {

    /**
     * 攔截目標物件的目標方法的執行
     * @param invocation
     * @return
     * @throws Throwable
     */
    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        //執行目標方法
        Object proceed = invocation.proceed();
        //返回執行後的返回值
        return proceed;
    }

    /**
     * 包裝目標物件,為目標物件建立一個代理物件
     * @param target
     * @return
     */
    @Override
    public Object plugin(Object target) {
        //藉助Plugin的wrap方法來使用當前Interceptor包裝目標物件
        Object wrap = Plugin.wrap(target, this);
        //返回為當前target建立的動態代理物件
        return wrap;
    }

    /**
     * 將外掛註冊時的property屬性設定進來
     * @param properties
     */
    @Override
    public void setProperties(Properties properties) {
        System.out.println("外掛配置資訊:"+properties);
        String username = (String) properties.get("username");
        String password = (String) properties.get("password");
    }
}

mybatis-config.xml

<configuration>
   <!-- 配置全域性外掛 -->
    <plugins>
        <plugin interceptor="com.feng.config.MyFirstPlug">
            <property name="username" value="zhangsan"/>
            <property name="password" value="123456"/>
        </plugin>
    </plugins>
</configuration>