<settings/> settings的配置內容 <typeAliases/> 別名 表 系統定義的typeAliases 別名 映射的類型 _byte byte _long long _short short _int int _integer int _double double _float ...
<?xml version="1.0" encoding="UTF-8" ?>
<!--plugins在配置文件中的位置必須要符合要求,否則會報錯--> <configuration> <properties/><!-- 屬性 --> <settings/><!-- 設置 --> <typeAliases/><!-- 類型命名(別名) --> <typeHandlers/><!-- 類型處理器 --> <objectFactory/><!-- 對象工廠 --> <plugins/><!-- 插件 --> <environments><!--配置環境--> <environment> <transactionManager/><!--事務管理器--> <dataSource/> <!--數據源--> </environment> </environments> <databaseIdProvider/><!-- 資料庫廠商標誌 --> <mappers/><!-- 映射器 --> <configuration/>
<settings/>
settings的配置內容
設置參數 | 描述 | 有效值 | 預設值 |
cacheEnabled | 該配置影響的所有映射器中配置的緩存的全局開關 | true | false | true |
lazyLoadingEnabled | 延遲載入的全局開關。當開啟時,所有關聯對象都會延遲載入。 特定關聯關係中可通過設置fetchType屬性來覆蓋該項的開關狀態 | true | false | false |
aggressiveLazyLoading | 當啟用時,對任意延遲屬性的調用會使帶有延遲載入屬性的對象完整載入;反之,每種屬性將會按需載入。 | true | false | true |
multipleResultSetsEnabled | 是否允許單一語句返回多結果集(需要相容驅動)。 | true | false | true |
useColumnLabel | 使用列標簽代替列名。不同的驅動在這方面會有不同的表現, 具體可參考相關驅動文檔或通過測試這兩種不同的模式來觀察所用驅動的結果。 | true | false | true |
useGeneratedKeys | 允許 JDBC 支持自動生成主鍵,需要驅動相容。 如果設置為 true 則這個設置強制使用自動生成主鍵,儘管一些驅動不能相容但仍可正常工作(比如 Derby)。 | true | false | false |
autoMappingBehavior | 指定 MyBatis 應如何自動映射列到欄位或屬性。 NONE 表示取消自動映射;PARTIAL 只會自動映射沒有定義嵌套結果集映射的結果集。 FULL 會自動映射任意複雜的結果集(無論是否嵌套)。 | NONE, PARTIAL, FULL | PARTIAL |
defaultExecutorType | 配置預設的執行器。SIMPLE 就是普通的執行器;REUSE 執行器會重用預處理語句(prepared statements); BATCH 執行器將重用語句並執行批量更新。 | SIMPLE REUSE BATCH | SIMPLE |
defaultStatementTimeout | 設置超時時間,它決定驅動等待資料庫響應的秒數。 | Any positive integer | Not Set (null) |
defaultFetchSize | Sets the driver a hint as to control fetching size for return results. This parameter value can be override by a query setting. | Any positive integer | Not Set (null) |
safeRowBoundsEnabled | 允許在嵌套語句中使用分頁(RowBounds)。 | true | false | false |
mapUnderscoreToCamelCase | 是否開啟自動駝峰命名規則(camel case)映射,即從經典資料庫列名 A_COLUMN 到經典 Java 屬性名 aColumn 的類似映射。 | true | false | false |
localCacheScope | MyBatis 利用本地緩存機制(Local Cache)防止迴圈引用(circular references)和加速重覆嵌套查詢。 預設值為 SESSION,這種情況下會緩存一個會話中執行的所有查詢。 若設置值為 STATEMENT,本地會話僅用在語句執行上,對相同 SqlSession 的不同調用將不會共用數據。 | SESSION | STATEMENT | SESSION |
jdbcTypeForNull | 當沒有為參數提供特定的 JDBC 類型時,為空值指定 JDBC 類型。 某些驅動需要指定列的 JDBC 類型,多數情況直接用一般類型即可,比如 NULL、VARCHAR 或 OTHER。 | JdbcType enumeration. Most common are: NULL, VARCHAR and OTHER | OTHER |
lazyLoadTriggerMethods | 指定哪個對象的方法觸發一次延遲載入。 | A method name list separated by commas | equals,clone,hashCode,toString |
defaultScriptingLanguage | 指定動態 SQL 生成的預設語言。 | A type alias or fully qualified class name. | org.apache.ibatis.scripting.xmltags.XMLDynamicLanguageDriver |
callSettersOnNulls | 指定當結果集中值為 null 的時候是否調用映射對象的 setter(map 對象時為 put)方法,這對於有 Map.keySet() 依賴或 null 值初始化的時候是有用的。註意基本類型(int、boolean等)是不能設置成 null 的。 | true | false | false |
logPrefix | 指定 MyBatis 增加到日誌名稱的首碼。 | Any String | Not set |
logImpl | 指定 MyBatis 所用日誌的具體實現,未指定時將自動查找。 | SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING | not set |
proxyFactory | 指定 Mybatis 創建具有延遲載入能力的對象所用到的代理工具。 | CGLIB | JAVASSIST | JAVASSIST (MyBatis 3.3 or above) |
<typeAliases/> 別名
表 系統定義的typeAliases
別名 |
映射的類型 |
_byte |
byte |
_long |
long |
_short |
short |
_int |
int |
_integer |
int |
_double |
double |
_float |
float |
_boolean |
boolean |
string |
String |
byte |
Byte |
long |
Long |
short |
Short |
int |
Integer |
integer |
Integer |
double |
Double |
float |
Float |
boolean |
Boolean |
date |
Date |
decimal |
BigDecimal |
bigdecimal |
BigDecimal |
<typeHandler/> 類型處理器
表 系統註冊的typeHandler簡介
<environments/>
<--default:表明在預設的情況下,我們將啟用哪個數據源配置-->
<environments default="development"> <environment id="development">
<!-- type:
JDBC:採用JDBC的方式管理事務
MANAGED:採用容器方式管理事務,在JNDI數據源中經常使用
自定義:使用自定義資料庫事務管理辦法
--> <transactionManager type="JDBC"/>
<!--type
UNPOOLED,非連接池資料庫。
POOLED,連接池資料庫
--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis-learn" /> <property name="username" value="root"/> <property name="password" value="tiger"/> </dataSource> </environment> </environments>
<databaseIdProvider/> 資料庫廠商標識:
作用是指定SQL到對應的資料庫廠商提供的資料庫中運行
<databaseIdProvider type="DB_VENDOR"> <property name="MySQL" value="mysql"/> <property name="Oracle" value="oracle" /> <property name="SQL Server" value="sqlserver" /> <property name="DB2" value="db2" /> </databaseIdProvider>
type="DB_VENDOR"是啟動MyBatis內部註冊的策略器。首先MyBatis會將你的配置讀取入Configuration類型裡面,在連接資料庫後調用getDatabaseProductName()方法區獲取資料庫的信息,然後用我們配置的name值去做匹配來得到DatabaseId。我們可以用下麵的代碼來獲得資料庫的ID
sqlSessionFactory.getConfiguration().getDatabaseId();
我們也可以指定SQL在哪個資料庫廠商
<select parameterType="string" id="getRole" resultType="role" databaseId="mysql"> select role_no as roleNo, role_name as roleName, note from t_role where role_no=#{roleNo,javaType=String,jdbcType=VARCHAR} </select>
在多了一個databaseId屬性的情況下,mybatis將提供如下規則:
- 如果沒有配置<databaseIdProvider/>,那麼databaseId就會返回null;
- 如果配置了<databaseIdProvider/>,MyBatis就會用配置的name值去匹配資料庫信息,如果匹配的上就會設置databaseId,否則依舊是null;
- 如果Configuration的databaseId不為空,則它只會找到配置databaseId的SQL語句
- MyBatis會載入不帶databaseId屬性和帶有匹配當前資料庫databaseId屬性的所有語句。如果同時找到帶有databaseId和不帶databaseId的相同語句,則後者會被捨棄;
<mappers/>映射器
引入映射器的方法:
1.用文件路徑引入映射器
<mappers> <mapper resource="com/yihaomen/mybatis/model/DatabaseIdProvider.xml"/> </mappers>
2.用包名引入映射器
<mappers> <mapper resource="com.yihaomen.mybatis.model"/> </mappers>
3.用類註冊引入映射器
<mappers> <mapper resource="com.yihaomen.mybatis.mapper.DatabaseIdProviderMapper"/> </mappers>
參考文獻:
[1] 楊開振 著,《深入淺出MyBatis技術原理與實戰》, 電子工業出版社,2016.09