mybatis 配置相關
1、結構目錄以及mybatis-config.xml的標簽屬性
- configuration(配置)
- properties(屬性)
- settings(設置)
- typeAliases(類型別名)
- typeHandlers(類型處理器)
- objectFactory(對象工廠)
- plugins(插件)
- environments(環境配置)
- environment(環境變量)
- transactionManager(事務管理器)
- dataSource(數據源)
- environment(環境變量)
- databaseIdProvider(數據庫廠商標識)
- mappers(映射器)
數據來源於mybatis官方文檔 https://mybatis.org/mybatis-3/zh/configuration.html
2、屬性(properties)
這些屬性可以在外部進行配置,並可以進行動態替換。
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
username=root
password=root
只需要在在mybatis-config.xml中添加properties標簽即可
<properties resource="database.properties"/>
由於DTD約束了XML的文檔結構,所以標簽應該放在首位
同時也可以在properties標簽的子元素中設置
<properties resource="org/mybatis/example/config.properties">
<property name="username" value="dev_user"/>
<property name="password" value="F2Fa3!33TYyg"/>
</properties>
二者並存時以外部引用為准,本文不在做過多贅述
3、environments(環境配置)
MyBatis 可以配置成適應多種環境,這種機制有助於將 SQL 映射應用於多種數據庫之中,不過盡管可以配置多個環境,但每個 SqlSessionFactory 實例只能選擇一種環境。
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${rul}"/>
<property name="username" value="${password}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
<environment id="test">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
environments的default屬性指定了默認的配鏡環境。同時也可以在創建SqlSessionFactory時指定使用哪一套
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment);
如果不聲明,則使用的為默認default的環境配置
事務管理器(transactionManager)
在 MyBatis 中有兩種類型的事務管理器(也就是 type="[JDBC|MANAGED]")
-
JDBC:配置直接使用了 JDBC 的提交和回滾設施
-
MANAGED:這個配置幾乎沒做什么,而是讓容器來管理事務的整個生命周期
且在以后的Spring+mybatis中Spring模塊會使用自帶的管理器來覆蓋前面的配置。所以二者了解即可
數據源(dataSource)
有三種內建的數據源類型(也就是 type="[UNPOOLED|POOLED|JNDI]")
- UNPOOLED 無池
- POOLED 有池
- JNDI EJB服務器使用,了解即可
3、映射器(mappers)
mapper映射器的作用是告訴MyBatis到哪里去找到這些語句
有四種方法:
- 使用相對於類路徑的資源引用
<mappers>
<mapper resource="dao/UserMapper.xml"/>
</mappers>
- 使用完全限定資源定位符(URL) 不推薦使用!
<mappers>
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
</mappers>
- 使用映射器接口實現類的完全限定類名
<mappers>
<mapper class="dao.UserMapper"/>
</mappers>
- 將包內的映射器接口實現全部注冊為映射器
<mappers>
<package name="dao"/>
</mappers>
如果使用package或者class兩種,需要接口與對應的xml文件同名同包。否則mybatis找不到對應關系
4、類型別名(typeAliases)
類型別名可為 Java 類型設置一個縮寫名字。 它僅用於 XML 配置,意在降低冗余的全限定類名書寫。
有兩種方式:
- 自定義 typeAlias
<typeAliases>
<typeAlias type="entity.User" alias="user"/>
</typeAliases>
這樣在所有xml中如果有要使用全限定名(entity.User)的地方都可以替換為別名(user)
- 包掃描 package
<typeAliases>
<package name="entity"/>
</typeAliases>
使用package時,mybatis會掃描聲明的包下所有類,並設置類的首字母小寫為默認別名
如果想要更改默認的別名,需要在實體類加注解
@Alias("u")
public class User {
private int id;
private String name;
private String pwd;
}
這樣就可以覆蓋調默認被設置為user的別名為u
好了,現在我們再也不用寫很長的實體類全限定名了,可以用已經配置好的alias代替,這在實體類很多的項目中時十分有用的
mybatis也為我們提供了許多默認的別名
總的來說:
-
基本數據類型別名為前面加下划線"_" 例如: int _int
-
基本類型包裝類為原數據類型首字母小寫 例如: Double double
-
其他JDK自帶的工具類等同為首字母小寫 例如:Map map
5、設置Setting
這是 MyBatis 中極為重要的調整設置,它們會改變 MyBatis 的運行時行為。
- cacheEnabled 是否開啟緩存,以后會提到。
- lazyLoadingEnabled 是否開啟懶加載
- logImpl 日志的具體實現
- mapUnderscoreToCamelCase 是否開啟駝峰命名自動映射,即從經典數據庫列名 user_name 映射到經典 Java 屬性名 userName。
其余暫時不作為了解的內容
6、其他配置
類型處理器(typeHandlers)
類型處理器是用來平衡java中和mysql中數據類型不統一的問題的,暫不作為重點了解即可。
objectFactory(對象工廠)和plugins(插件)
暫時不需要作為了解的內容,本文略
7、總結
mybatis-config.xml文件作為mybatis的核心配置,要掌握的大概就這么多,其余一些緩存、日志相關會在以后的進度中相繼添加。目前要掌握的不是特別多。實踐最重要!