使用Mybatis-Plus進行數據庫的訪問,但是由于不同的數據庫有不同的方言,所以需要進行適配。
有2種實現方式:
- databaseId方式
- Mapper Location方式
指定databaseId方式
通過databaseId
指定所使用的數據庫,選擇同步的SQL。
Mapper.xml設置
默認*Mapper.xml
文件的路徑在 resources/mapper/
下
默認*Mapper.xml
文件的路徑在 resources/mapper/
下
<!--這個SQL 只會在數據庫是mysql的情況下使用 --><select id="listAll" resultType="com.sinopec.exploit.model.T1Entity" databaseId="mysql">SELECT *FROM t2</select><!--這個SQL 只會在數據庫是pgsql的情況下使用 --><select id="listAll" resultType="com.sinopec.exploit.model.T1Entity" databaseId="pgsql">SELECT *FROM t3</select><!--這個SQL 只會在數據庫是人大金倉 的情況下使用 --><select id="listAll" resultType="com.sinopec.exploit.model.T1Entity" databaseId="kes">SELECT *FROM t3</select><!--這個SQL 只會在數據庫不是mysql、pgsql、人大金倉的情況下使用 --><select id="listAll" resultType="com.sinopec.exploit.model.T1Entity" >SELECT *FROM t4</select><!--這個SQL 表示 selectOne 方法,在任何數據庫中的實現是一致的。 --><select id="selectOne" resultType="com.sinopec.exploit.model.T1Entity" >SELECT *FROM t5</select>
databaseId
用于指定SQL適用于哪個數據庫,如果沒有設置,則表示適用于所有數據庫。Mybatis在選擇SQL時,先根據yaml中配置的 databaseId
值與*Mapper.xml
中SQL的databaseId
匹配,如果匹配則選擇,如果不匹配,則選擇沒有設置databaseId
的SQL,如果仍然未匹配上,則報錯。
在代碼中可以引用變量
_databaseId
表示databaseId。
指定databaseId
指定databaseId
有多種方式:
-
直接配置
mybatis-plus:configuration:database-id: mysql
-
自動偵測
通過
DatabaseIdProvider
獲取DatabaseProductName
。@Beanpublic DatabaseIdProvider databaseIdProvider() {VendorDatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();Properties properties = new Properties();properties.put("Oracle","oracle");properties.put("MySQL","mysql");properties.put("PostgreSQL","pgsql");databaseIdProvider.setProperties(properties);return databaseIdProvider;}
OiO產品采用yaml配置方式。
databaseId值設置
- Mysql:
mysql
- Oracle:
oracle
- postgresql:
pgsql
- 人大金倉:
kes
- 達夢:
dm
當前OiO產品實現了mysql、postgresql、人大金倉的兼容。
后續可能會擴展到達夢數據庫,待定。
Mapper Location方式
1、在resources里放置多個數據庫的目錄,然后不同目錄放置不同的方言語句。
2、指定Mapper.xml
文件
mybatis-plus:# MyBatis Mapper所對應的XML文件位置mapper-locations: classpath:/mapper/mysql/*Mapper.xml
確定方案
Mapper Location
方式雖然邏輯清晰的區分多種數據庫,但是再擴展多一種方式的時候,不能快速確定哪些SQL 是不一致的。
因此選擇databaseId
方式。
以前部分服務采用了Mapper Location
方式,因此需要調整為databaseId
方式。
IDEA怎么比較2個文件
1、選擇一個要比較的文件
2、按住CTRL
,選擇另外一個文件。
3、點擊右鍵,選擇Compare Files
命令,比較2個文件差異。