MyBatis配置文件(一)――properties屬性


MyBatis配置文件中有很多配置項,這些配置項分別代表什么,有什么作用,需要理一下了。先通過下面這個例子來看都有哪些配置項

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration
 3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4   "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <!-- mybatis的基本配置文件:主要配置基本的上下文參數和運行環境 -->
 6 <configuration>
 7     <!--配置-->
 8     <properties></properties>
 9     <!--設置 -->
10     <settings></settings>
11     <!--類型命名 -->
12     <!--別名:pojo對象的別名 -->
13     <typeAliases>
14         <typeAlias alias="user" type="com.daily.pojo.User"></typeAlias>
15         <typeAlias alias="product" type="com.daily.pojo.Product"></typeAlias>
16     </typeAliases>
17     <!--類型處理器 -->
18     <typeHandlers></typeHandlers>
19     <!--對象工廠 -->
20     <objectFactory></objectFactory>
21     <!--插件 -->
22     <plugins></plugins>
23     <!-- 環境模式:development開發模式 work工作模式 -->
24     <environments default="development">
25         <!--環境變量 -->
26         <environment id="development">
27             <!--事務管理器 -->
28             <transactionManager type="JDBC" />
29             <!--數據源 -->
30             <dataSource type="POOLED">
31                 <property name="driver" value="${db.driver}" />
32                 <property name="url" value="${db.url}" />
33                 <property name="username" value="${db.username}" />
34                 <property name="password" value="${db.pwd}" />
35             </dataSource>
36         </environment>
37     </environments>
38     <!--數據庫廠商標示 -->
39     <databaseIdProvider></databaseIdProvider>
40     <!-- 映射器 -->
41     <mappers>
42         <mapper resource="com/daily/mapper/UserMapper.xml" />
43         <mapper resource="com/daily/mapper/ProductMapper.xml" />
44     </mappers>
45 </configuration>

以上就是所有的配置項,需要注意的是配置項的順序不能顛倒,如果顛倒了它們的順序,在MyBatis的自啟動階段會發生異常,導致程序無法運行。我會一個一個配置地做一下分析和記錄,為了避免文章太長導致日后復習或別人閱讀時產生疲勞,我決定一個配置項分一篇的方式進行記錄。今天先分析一下第一個配置項properties。

首先properties的使用方式有三種:

1⃣️property子元素:就是在properties屬性中增加子屬性property,從而設置一些配置的key-value;

2⃣️properties文件:就是直接使用properties引入外部配置文件,相當於將子屬性抽取成一個獨立的外部文件引入;

3⃣️程序代碼傳遞參數:就是通過代碼的方式設置該配置相關的信息,如數據庫配置文件中的用戶名和密碼一般是密文,但是連接數據庫時需要對配置進行解密,此時就只能通過程序代碼的方式配置了;

下面以數據庫配置為例,來實現這三種不同的配置方式:

⚠️注意:因為是單獨介紹,所以這里顯示properties的配置,不顯示其他配置項

一、property子元素

1 <properties>
2     <property name="db.driver" value="org.postgresql.Driver"></property>
3     <property name="db.url" value="jdbc:postgresql://localhost:5433/postgres"></property>
4     <property name="db.username" value="postgres"></property>
5     <property name="db.pwd" value="postgres"></property>
6 </properties>

 這種配置方式的缺點是,如果配置項很多,那么就會讓配置文件顯得很龐大,為了解決這個缺點,我們可以使用下面的配置方式👇

二、properties文件

首先將上述配置中的所有property屬性提取到一個叫做db.properties的配置文件中,如下圖所示:

1 #postgresql
2 db.driver=org.postgresql.Driver
3 db.url=jdbc:postgresql://localhost:5433/postgres
4 db.username=cG9zdGdyZXM=
5 db.pwd=aHljMTIz

然后將該文件引入MyBatis配置文件

1 <properties resource="db.properties" />

這樣就相當於將db.properties中的所有配置都加載到MyBatis的配置文件中了,但是這種使用方式也存在它的缺點,當外部配置文件中的值需要加密時,如連接數據庫的用戶名和密碼,無法在配置文件中進行解密,所以只能通過程序代碼傳遞的方式,就是要介紹的第三種,如下👇

三、程序代碼方式傳遞參數

其實這種方式一般會和第二種配合使用,作用對特殊配置進行覆蓋或重寫,以上面的db.properties為例,在使用到數據庫配置信息時對配置中的用戶名和密碼進行解密。這里舉個MyBatis中獲取SqlSessionFactory的例子:

 1 public static SqlSessionFactory getSqlSessionFactoryByXml() {
 2         synchronized (Lock) {
 3             if (null != sqlSessionFactory) {
 4                 return sqlSessionFactory;
 5             }
 6             String resource = "mybatis-config.xml";
 7             InputStream inputStream;
 8             InputStream is = null;
 9             try {
10                 // 加載數據庫配置文件
11                 is = Resources.getResourceAsStream("db.properties");
12                 Properties properties = new Properties();
13                 properties.load(is);
14 
15                 // 獲取加密信息
16                 String userName = properties.getProperty("db.username");
17                 String pwd = properties.getProperty("db.pwd");
18 
19                 // 解密用戶名和密碼,並重置屬性
20                 properties.setProperty("db.username", CyperTool.decodeByBase64(userName));
21                 properties.setProperty("db.pwd", CyperTool.decodeByBase64(pwd));
22                 // 讀取mybatis配置文件
23                 inputStream = Resources.getResourceAsStream(resource);
24                 // 通過SqlSessionFactoryBuilder類的builder方法進行構建,並使用程序傳遞的方式覆蓋原有屬性
25                 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, properties);
26             } catch (IOException e) {
27                 e.printStackTrace();
28                 return null;
29             }
30             return sqlSessionFactory;
31         }
32     }

上面的代碼中:

1⃣️11~13行是加載數據庫配置文件

2⃣️16、17行是獲取加密配置

3⃣️20、21行是解密數據並重新設置到配置文件中

4⃣️25行通過傳遞配置文件完成重寫

以上就是properties屬性的所有內容,一般來說如果不加密,會使用第二種方式,這樣降低維護的耦合性,如果有加密信息,則使用第三種。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM