一、前言 剛換工作,為了更快的學習框架和瞭解業務,基本每天都會加班,導致隔了幾天沒有進行總結,心裡總覺得不安,工作年限越長越感到學習的重要性,堅持下去!!! 經過前兩篇的總結,已經基本掌握了mybatis的開發模式,這篇主要是總結SqlMapConfig.xml文件的配置 SqlMapConfig. ...
一、前言
剛換工作,為了更快的學習框架和瞭解業務,基本每天都會加班,導致隔了幾天沒有進行總結,心裡總覺得不安,工作年限越長越感到學習的重要性,堅持下去!!!
經過前兩篇的總結,已經基本掌握了mybatis的開發模式,這篇主要是總結SqlMapConfig.xml文件的配置
作用 | |
---|---|
properties | 用來載入屬性文件 |
settings | 用來設置全局參數 |
typeAliases | 用來設置類型的別名 |
typeHandlers | 用來設置類型處理器 |
objectFactory | 用來設置對象工廠 |
plugins | 用來設置插件 |
environments | 用來設置mybatis的環境 |
mappers | 用來配置映射文件 |
註:配置文件必須按照此順序進行配置
下麵依次來介紹各個配置
內容如下:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456
SqlMapConfig,xml 中修改:
<properties resource="config/db.properties"> <!-- properties中還可以配置一些屬性名和屬性值,此處的優先載入 <property name="" value=""/> <property name="jdbc.username" value=""/> <property name="jdbc.password" value=""/> --> </properties> <!-- 和spring整合後 environments配置將廢除 --> <environments default="development"> <environment id="development"> <!-- 使用jdbc事務管理 --> <transactionManager type="JDBC" /> <!-- 資料庫連接池 --> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments>
註意: MyBatis 將按照下麵的順序來載入屬性:在 properties 元素體內定義的屬性首先被讀取。 然後會讀取properties 元素中resource或 url 載入的屬性,它會覆蓋已讀取的同名屬性
三、
Description(描述) | valid Values(驗證值組) | Default(預設值) | |
---|---|---|---|
cacheEnabled | 在全局範圍內啟用或禁用緩存配置 任何映射器在此配置下。 | true | false | TRUE |
lazyLoadingEnabled | 在全局範圍內啟用或禁用延遲載入。禁用時,所有相關聯的將熱載入。 | true | false | TRUE |
aggressiveLazyLoading | 啟用時,有延遲載入屬性的對象將被完全載入後調用懶惰的任何屬性。否則,每一個屬性是按需載入。 | true | false | TRUE |
multipleResultSetsEnabled | 允許或不允許從一個單獨的語句(需要相容的驅動程式)要返回多個結果集。 | true | false | TRUE |
useColumnLabel | 使用列標簽,而不是列名。在這方面,不同的驅動有不同的行為。參考驅動文檔或測試兩種方法來決定你的驅動程式的行為如何。 | true | false | TRUE |
useGeneratedKeys | 允許JDBC支持生成的密鑰。相容的驅動程式是必需的。此設置強制生成的鍵被使用,如果設置為true,一些驅動會不相容性,但仍然可以工作。 | true | false | FALSE |
autoMappingBehavior | 指定MyBatis的應如何自動映射列到欄位/屬性。NONE自動映射。 PARTIAL只會自動映射結果沒有嵌套結果映射定義裡面。 FULL會自動映射的結果映射任何複雜的(包含嵌套或其他)。 | NONE,PARTIAL,FULL | PARTIAL |
defaultExecutorType | 配置預設執行人。SIMPLE執行人確實沒有什麼特別的。 REUSE執行器重用準備好的語句。 BATCH執行器重用語句和批處理更新。 | SIMPLE,REUSE,BATCH | SIMPLE |
safeRowBoundsEnabled | 允許使用嵌套的語句RowBounds。 | true | false | FALSE |
mapUnderscoreToCamelCase | 從經典的資料庫列名A_COLUMN啟用自動映射到駱駝標識的經典的Java屬性名aColumn。 | true | false | FALSE |
localCacheScope | MyBatis的使用本地緩存,以防止迴圈引用,並加快反覆嵌套查詢。預設情況下(SESSION)會話期間執行的所有查詢緩存。如果localCacheScope=STATMENT本地會話將被用於語句的執行,只是沒有將數據共用之間的兩個不同的調用相同的SqlSession。 | SESSIONSTATEMENT | SESSION |
dbcTypeForNull | 指定為空值時,沒有特定的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 | 指定如果setter方法或地圖的put方法時,將調用檢索到的值是null。它是有用的,當你依靠Map.keySet()或null初始化。註意原語(如整型,布爾等)不會被設置為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 | CGLIB |
預設的配置如下:
<settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="multipleResultSetsEnabled" value="true"/> <setting name="useColumnLabel" value="true"/> <setting name="useGeneratedKeys" value="false"/> <setting name="autoMappingBehavior" value="PARTIAL"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="defaultStatementTimeout" value="25"/> <setting name="safeRowBoundsEnabled" value="false"/> <setting name="mapUnderscoreToCamelCase" value="false"/> <setting name="localCacheScope" value="SESSION"/> <setting name="jdbcTypeForNull" value="OTHER"/> <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/> </settings>
四、
映射的類型 | |
---|---|
_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 |
除了這些預設別名,我們還可以自己定義別名:
<typeAliases> <!-- 單個別名定義 --> <typeAlias alias="user" type="com.yuanqinnan.model.User" /> <!-- 批量別名定義,掃描整個包下的類,別名為類名(大小寫不敏感) --> <package name="com.yuanqinnan.model" /> <package name="其它包" /> </typeAliases>
五、mappers(映射器)
Mapper配置的幾種方法:
通過resource載入單個映射文件
<mappers> <!-- 映射文件方式1,一個一個的配置--> <mapper resource="config/sqlmap/User.xml"/> <mapper resource="config/mapper/UserMapper.xml"/> </mappers>
<!-- 通過mapper介面載入單個映射配置文件遵循一定的規範:需要將mapper介面類名和mapper.xml映射文件名稱保持一致,且在一個目錄中;邊規範的前提是:使用的是mapper代理方法; --> <mapper class="com.yuanqinnan.mapper.UserMapper"/>
批量載入mapper(推薦使用)
<!--此種方法要求mapper介面名稱和mapper映射文件名稱相同,且放在同一個目錄中--> <mapper class="com.yuanqinnan.mapper"/>