成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一篇聊聊Mybatis插件開發

開發 前端
允許在 plugin 元素中配置所需參數,方法在插件初始化的時候就被調用了一次,然后把插件對象存入到配置中,以便后面再取出。

Mybatis的插件,主要用于在執行sql前后,對sql進行封裝加工,或者在sql執行后,對數據進行加工處理。常用于一些公共數據操作處理,例如:

  1. 分頁插件,在執行sql查詢前增加分頁參數
  2. 多租戶系統中,增加租戶ID參數。
  3. 增加更新時間、創建時間、更新人、創建人的參數信息。
  4. 數據權限中,增加參數查詢。

插件開發過程

確定需要攔截的簽名

指定需要攔截的方法,通過方法簽名來指定,方法簽名即指定哪個類的哪個方法+方法參數。這里的類不能隨便寫,只能從以下幾個類中選,也就是說,MyBatis 插件可以攔截四大對象中的任意一個。

  • Executor 是執行 SQL 的全過程,包括組裝參數,組裝結果集返回和執行 SQL 過程,都可以攔截。
  • StatementHandler 是執行 SQL 的過程,我們可以重寫執行 SQL 的過程。
  • ParameterHandler 是攔截執行 SQL 的參數組裝,我們可以重寫組裝參數規則。
  • ResultSetHandler 用于攔截執行結果的組裝,我們可以重寫組裝結果的規則。

我們來看以下mybatisplus的插件配置的簽名:

@Intercepts(
    {
        @Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class}),
        @Signature(type = StatementHandler.class, method = "getBoundSql", args = {}),
        @Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class}),
        @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}),
        @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class}),
    }
)
public class MybatisPlusInterceptor implements Interceptor {
//...
}

type指定四大類型中的任意一個,method指定攔截類型中方法,args指定方法參數。例如:

@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})

指定了攔截StatementHandler的prepare方法,方法有兩個參數,一個是Connection類型,另一個是Integer類型。

public interface StatementHandler {

  Statement prepare(Connection connection, Integer transactionTimeout)
      throws SQLException;
      
      //....
      }

插件接口定義

在 MyBatis 中開發插件,需要實現 Interceptor 接口。接口的定義如下:

public interface Interceptor {
 
  Object intercept(Invocation invocation) throws Throwable;
 
  Object plugin(Object target);
 
  void setProperties(Properties properties);
 
}
  • intercept 方法:它將直接覆蓋你所攔截對象原有的方法,因此它是插件的核心方法。通過 invocation 參數可以反射調度原來對象的方法。
  • plugin 方法:target 是被攔截對象,它的作用是給被攔截對象生成一個代理對象,并返回它。為了方便 MyBatis 使用 org.apache.ibatis.plugin.Plugin 中的 wrap 靜態方法提供生成代理對象。
  • setProperties 方法:允許在 plugin 元素中配置所需參數,方法在插件初始化的時候就被調用了一次,然后把插件對象存入到配置中,以便后面再取出。

實現插件

創建個類實現Interceptor接口,并且在實現類上指定方法簽名即可。

最后需要在mybatis配置文件中配置插件

<plugins>
        <plugin interceptor="com.yjw.demo.mybatis.common.page.PageInterceptor">
        </plugin>
    </plugins>

最后建議看一下MybatisPlusInterceptor的實現,里面還使用到了責任鏈設計模式。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2023-07-31 07:48:43

Java內存虛擬機

2023-08-03 07:34:34

格式化字符串參數

2022-06-02 07:11:13

JVMJava

2023-12-08 08:26:05

數據存儲持久性

2021-11-15 07:47:40

字符串位置存儲

2021-10-30 07:55:00

BLE 藍牙開發

2022-10-08 15:07:06

ChatOps運維

2021-04-16 07:46:13

Serverless 云開發FaaS

2021-07-12 06:11:14

SkyWalking 儀表板UI篇

2022-10-26 07:39:36

MVCC數據庫RR

2022-01-02 08:43:46

Python

2022-12-19 08:14:30

注解開發配置

2022-02-07 11:01:23

ZooKeeper

2023-04-20 08:00:00

ES搜索引擎MySQL

2021-05-20 06:57:16

RabbitMQ開源消息

2020-11-20 10:15:05

TensorFlow

2022-03-18 07:48:58

GhostNode.js開源

2025-05-13 01:10:00

數據產品開發

2021-11-03 14:49:20

開發摸魚側邊欄

2022-10-20 18:00:00

MyBatis緩存類型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄色a三级| 91免费在线看 | 国产网站在线 | 91精品久久久久久久久中文字幕 | 亚洲精品一区二区二区 | 成人精品视频 | 中文字幕免费视频 | 日韩亚洲视频 | 97综合在线| 中文字幕色站 | 欧美日韩在线观看一区 | 精精国产xxxx视频在线播放 | 久久久www成人免费无遮挡大片 | 亚洲国产精品一区二区三区 | 美女视频.| 色就是色欧美 | 九九免费在线视频 | 国产精品久久久久久久7电影 | 国产免费一区二区三区 | 欧美黑人一区 | 国产乱码精品一区二区三区忘忧草 | 欧美精品乱码久久久久久按摩 | 艹逼网 | a国产视频 | 精品在线播放 | 盗摄精品av一区二区三区 | 黄色一级大片在线免费看产 | 91影院在线观看 | 在线观看视频中文字幕 | 日韩在线小视频 | 亚洲最大av网站 | 国产一区亚洲 | 欧美男人天堂 | 国产精品色 | 欧美一区二区三区在线视频 | 日本a级大片 | 精品99久久 | 午夜99| 伊人网91| 九九热在线观看视频 | 久久精品成人一区 |