一、全局配置文件
config.xml :配置內容和順序如下(順序不能亂):dtd約束規定
Properties(屬性)屬性配置文件
Settings(全局參數設置)懶加載二級緩存
typeAliases(類型別名)
typeHandlers(類型處理器)
objectFactory(對象工廠)
plugins(插件)分頁插件
environments(環境信息集合)
environment(單個環境信息)
transactionManager(事物)
dataSource(數據源)
mappers(映射器)
1 、1 常用配置
Properties
配置文件的加載順序
- 先加載properties中property標籤聲明的屬性
- 再加載properties標籤引入的java配置文件(properties配置文件)中的屬性
- parameterType的值會和properties的屬性值發生衝突。(比如實體類的字段和)
<properties resource="dbinfo.properties">
<!--加載一個配置文件 <property name="driver" value="com.mysql.jdbc.Driver"/> -->
</properties>
settings
mybatis全局配置參數,全局參數將會影響mybatis的運行行爲。
Setting(設置) | Description(描述) | Valid Values(驗證值組) |
cacheEnabled | 在全局範圍內啓用或禁用緩存配置任何映射器在此配置下。 | true | false |
lazyLoadingEnabled | 在全局範圍內啓用或禁用延遲加載。禁用時,所有協會將熱加載。 | true | false |
aggressiveLazyLoading | 啓用時,有延遲加載屬性的對象將被完全加載後調用懶惰的任何屬性。否則,每一個屬性是按需加載。 | true | false |
multipleResultSetsEnabled | 允許或不允許從一個單獨的語句(需要兼容的驅動程序)要返回多個結果集。 | true | false |
useColumnLabel | 使用列標籤,而不是列名。在這方面,不同的驅動有不同的行爲。參考驅動文檔或測試兩種方法來決定你的驅動程序的行爲如何。 | true | false |
useGeneratedKeys | 允許JDBC支持生成的密鑰。兼容的驅動程序是必需的。此設置強制生成的鍵被使用,如果設置爲true,一些驅動會不兼容性,但仍然可以工作。 | true | false |
autoMappingBehavior | 指定MyBatis的應如何自動映射列到字段/屬性。NONE自動映射。 PARTIAL只會自動映射結果沒有嵌套結果映射定義裏面。 FULL會自動映射的結果映射任何複雜的(包含嵌套或其他)。 | NONE, PARTIAL, FULL |
defaultExecutorType | 配置默認執行人。SIMPLE執行人確實沒有什麼特別的。 REUSE執行器重用準備好的語句。 BATCH執行器重用語句和批處理更新。 | SIMPLE REUSE BATCH |
defaultStatementTimeout | 設置驅動程序等待一個數據庫響應的秒數。 | Any positive integer |
safeRowBoundsEnabled | 允許使用嵌套的語句RowBounds。 | true | false |
mapUnderscoreToCamelCase | 從經典的數據庫列名A_COLUMN啓用自動映射到駱駝標識的經典的Java屬性名aColumn。 | true | false |
localCacheScope | MyBatis的使用本地緩存,以防止循環引用,並加快反覆嵌套查詢。默認情況下(SESSION)會話期間執行的所有查詢緩存。如果localCacheScope=STATMENT本地會話將被用於語句的執行,只是沒有將數據共享之間的兩個不同的調用相同的SqlSession。 | SESSION | STATEMENT |
dbcTypeForNull | 指定爲空值時,沒有特定的JDBC類型的參數的JDBC類型。有些驅動需要指定列的JDBC類型,但其他像NULL,VARCHAR或OTHER的工作與通用值。 | JdbcType enumeration. Most common are: NULL, VARCHAR and OTHER |
lazyLoadTriggerMethods | 指定觸發延遲加載的對象的方法。 | A method name list separated by commas |
defaultScriptingLanguage | 指定所使用的語言默認爲動態SQL生成。 | A type alias or fully qualified class name. |
callSettersOnNulls | 指定如果setter方法或地圖的put方法時,將調用檢索到的值是null。它是有用的,當你依靠Map.keySet()或null初始化。注意原語(如整型,布爾等)不會被設置爲null。 | true | false |
logPrefix | 指定的前綴字串,MyBatis將會增加記錄器的名稱。 | Any String |
logImpl | 指定MyBatis的日誌實現使用。如果此設置是不存在的記錄的實施將自動查找。 | SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING |
proxyFactory | 指定代理工具,MyBatis將會使用創建懶加載能力的對象。 | CGLIB | JAVASSIS |
注意:配置文件中配置顯示sql語句
<settings>
<!--打印查詢語句 -->
<settingname="logImpl"value="STDOUT_LOGGING"/>
</settings>
typeAliases
對實體類進行別名的定義
①:mybatis支持的別名
別名 |
映射的類型 |
_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>
<!--定義實體類的別名爲 book-->
<typeAlias type="com.tf.domain.Book" alias="book"/>
<!-- 批量別名定義(推薦) -->
<!-- package:指定包名稱來爲該包下的po類聲明別名,默認的別名就是類名(首字母大小寫都可) -->
<package name="com.qf.domain"/>
</typeAliases>
輸入映射
parameterType
如果傳入對個參數,若參數類型是實體類中的
①:若參數類型是實體類中的,可以傳入實體類
②:也可以將參數設置爲Map
輸出映射
resultType(實體類和數據庫的字段一致)
使用resultType進行結果映射時,需要查詢出的列名和映射的對象的屬性名一致,才能映射成功。
如果查詢的列名和對象的屬性名全部不一致,那麼映射的對象爲空。
如果查詢的列名和對象的屬性名有一個一致,那麼映射的對象不爲空,但是隻有映射正確那一個屬性纔有值。
如果查詢的sql的列名有別名,那麼這個別名就是和屬性映射的列名。
resultMap(數據庫的字段和實體列的字段不一致)
使用resultMap進行結果映射時,不需要查詢的列名和映射的屬性名必須一致。但是需要聲明一個resultMap節點,來對列名和屬性名進行映射。
property: 實體類中的字段名
column: 數據庫中的字段名
<resultMap id="users1" type="com.tf.domain.Users1">
<id property="uid" column="id"/>
<result property="uname" column="name"></result>
<result property="upassword" column="password"></result>
<result property="ustatus" column="status"></result>
<result property="ucreateDate" column="createDate"></result>
</resultMap>
<select id="findAllUser1" resultMap="users1">
select * from users
</select>
總結:
ResultType:結果集類型可以是對象也可以是Map實體類和數據庫表的字段一致
ResultMap:結果集映射,當實體類屬性與數據庫字段(別名)不一致需要做結果映射
ParameterType:參數類型可以是對象也可以是Map
ParameterMap:不用