SpringBoot中如何配置MyBatis動態識別資料庫連線(DatabaseIdProvider的簡單使用方式)
阿新 • • 發佈:2021-01-25
在使用mybatis過程,如果有這樣的需求:動態切換資料庫,如在MySQL、PostgreSQL與Oracle之間進行切換,並使用同一個Dao介面。如何進行同一個函式呼叫mapper中不同的sql語句?
答案就是使用 DatabaseIdProvider 進行配置
步驟一:
在@Configuration標註的類中增加一個Bean:DatabaseIdProvider
@Bean
public DatabaseIdProvider getDatabaseIdProvider() {
DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
Properties p = new Properties();
p.setProperty("PostgreSQL", "postgresql");
p.setProperty("MySQL", "mysql");
databaseIdProvider.setProperties(p);
return databaseIdProvider;
}
步驟二:在Mapper中用以下方法寫SQL語句
<select id="queryAllTablesFromDataBase" resultType="map" databaseId="mysql">
show tables;
</select>
<select id="queryAllTablesFromDataBase" resultType="map" databaseId="postgresql">
SELECT tablename FROM pg_tables
WHERE tablename NOT LIKE 'pg%'
AND tablename NOT LIKE 'sql_%'
</ select>
最重要的就是這個databaseId,它區分了不同的資料庫
這樣在呼叫這個queryAllTablesFromDataBase的時候就會去找當前連線的資料庫對應的sql語句