您現在的位置是:首頁 > 單機遊戲首頁單機遊戲

Mybatis實現分包定義資料庫

簡介猜想需要分包實現不同資料來源的話,需要對不同的mapper指定不同的sqlSessionFactroy,檢視mapperScan的註解原始碼,透過理解註釋,我們是可以指定maper動態代理物件的sqlSessionFactory物件的

覆寫equals為什麼要覆寫hashcode

背景

業務需求中需要連線兩個資料庫處理資料,需要用動態資料來源。通過了解mybatis的框架,計劃 使用分包的方式進行資料來源的區分。

原理

前提:

我們使用mybatis都會有四個步驟

1:構建

SqlSessionFactory

2:透過

SqlSessionFactory

獲取到

sqlSession

物件

3:透過

sqlSession

物件獲取

Mapper

的動態代理物件

4:透過執行動態代理物件獲取返回值

其實點開sqlSessionFactory就的

Configuration

物件中的

Environment

物件綁定了我們的

dataSource

物件

Mybatis實現分包定義資料庫

同樣,我們透過debug發現,動態代理後的mapper物件是同樣持有

Configuration

物件,繫結我們的連線資訊。

Mybatis實現分包定義資料庫

猜想

需要分包實現不同資料來源的話,需要對不同的mapper指定不同的

sqlSessionFactroy

,檢視

mapperScan

的註解原始碼,

Mybatis實現分包定義資料庫

透過理解註釋,我們是可以指定maper動態代理物件的

sqlSessionFactory

物件的。然後結果

basePackages

就可以對不同的包使用不同的

sqlSessionFactory

從而實現不同包使用不同的資料來源。

實現

1:定義兩個資料來源

Mybatis實現分包定義資料庫

兩個資料來源分別命名位ds01,ds02,這裡採用都是德魯伊的資料庫連線池。為了簡介,詳細配置沒有展示了。

2:定義兩個

SqlSessionFactory

定義兩個

sqlSessionFactory

,分別繫結兩個資料來源。

Mybatis實現分包定義資料庫

Mybatis實現分包定義資料庫

3:不同包實現繫結不同的

sqlSessionFactory

透過

@MapperScan

指定掃描的包,通知指定

SqlSessionFactory

@MapperScan(basePackages = “com。lenven。demo。dao。ds02”,sqlSessionFactoryRef = “salveSqlSessionFactory”)@MapperScan(basePackages = “com。lenven。demo。dao。ds01”,sqlSessionFactoryRef = “masterSqlSessionFactory”)

4:測試

對兩個不同的包的mapper測試,都可以正確查詢出資料

拓展:

透過實現

Mybatis實現分包定義資料庫

AbstractRoutingDataSource

也可以實現動態資料來源。

該類實現

DataSource

的介面,可以配置對各資料來源在

@Nullable private Map resolvedDataSources;

這個屬性裡面。

讓後透過暴露一個

determineCurrentLookupKey

獲取需要使用的資料來源的key。但是需要注意事務的問題。

Top