MyBatis-全局配置文件 在MyBatis中全局配置文件有著重要的地位,裡面有9類行為信息;如果我們要想將MyBatis運用的熟練,配置全局配置文件是必不可少的步驟,所以我們一定要啃下這一塊硬骨頭。該文章是結合MyBatis配置文件網頁加個人理解做的筆記,如果有的地方寫的不夠好或者有錯誤。懇請大 ...
MyBatis-全局配置文件
在MyBatis中全局配置文件有著重要的地位,裡面有9類行為信息;如果我們要想將MyBatis運用的熟練,配置全局配置文件是必不可少的步驟,所以我們一定要啃下這一塊硬骨頭。該文章是結合MyBatis配置文件網頁加個人理解做的筆記,如果有的地方寫的不夠好或者有錯誤。懇請大家多多給我指出,因為我也是在摸索中進步。下麵將對9大行為信息和屬性信息配置進行解釋.
1. MyBatis配置
註:MyBatis的標簽是有順序的,如果不按照順序會出現The content of element type "configuration" must match 錯誤.標簽的順序為:
在Eclipse中引入XML的dtd約束文件,方便編寫XML的時候有提示
1)屬性(properties)
(1)dbconfig.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis jdbc.username=root jdbc.password=root123
(2)properties屬性
<!-- properties:引入外部properties配置文件的內容 --> <!-- url:引入網路路徑或者磁碟路徑下的資源 --> <!-- resource:引入類路徑下的資源 --> <properties resource="dbconfig.properties" ></properties>
(3)使用properties配置mybatis-config.xml
<!-- properties:引入外部properties配置文件的內容 --> <!-- url:引入網路路徑或者磁碟路徑下的資源 --> <!-- resource:引入類路徑下的資源 --> <properties resource="dbconfig.properties" ></properties> <environments default="development"> <environment id="development"> <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>
2)設置(settings) (1)mapUnderscoreToCamelCase
<!-- settings:包含很多設置項 --> <!-- setting:用來選擇設置中各項設置 --> <!-- name:設置項名 --> <!-- value:設置項取值 --> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings>
3)類型別名(typeAliases)
註意:MyBatis已經為許多常見的 Java 類型內建了相應的類型別名。它們都是大小寫不敏感的,我們在起別名的時候千萬不要占用已有的別名。
我們目前最新的mybatis推薦使用全限定類名書寫。
<!-- typeAliases:別名處理器,可以為java類型起別名.別名不區分大小寫 emp 和 Emp是一樣的 --> <!-- typeAlias:為java類型起別名 --> <!-- type:指定要起別名的類型全類名;預設別名就是類名小寫 --> <!-- alias:指定新的別名 --> <!-- package:指定一個包名,為該包下所有類批量起別名 --> <!-- 批量起別名的情況下,使用@Alias註解為某個類型指定新的別名 如:@Alias("empp") 起別名為empp--> <typeAliases> <!-- <typeAlias type="com.atguigu.mybatis.bean.Employee" alias="emp"/> --> <package name="com.atguigu.mybatis.bean" /> </typeAliases>
4)類型處理器(typeHandlers)
無論是 MyBatis 在預處理語句(PreparedStatement)中設置一個參數時,還是從結果集中取出一個值時, 都會用類型處理器將獲取的值以合適的方式轉換成 Java 類型。
• 日期和時間的處理,JDK1.8以前一直是個頭疼的問題。我們通常使用JSR310規範領導者Stephen Colebourne創建的Joda-Time來操作。1.8已經實現全部的JSR310規範了。
• 日期時間處理上,我們可以使用MyBatis基於JSR310(Date and Time API)編寫的各種日期時間類型處理器。
• MyBatis3.4以前的版本需要我們手動註冊這些處理器,以後的版本都是自動註冊的
5)對象工廠(objectFactory)
6)插件(plugins)
插件是MyBatis提供的一個非常強大的機制,我們可以通過插件來修改MyBatis的一些核心行為。插件通過動態代理機制,可以介入四大對象的任何一個方法的執行。
7)環境配置(environments)
<!-- environments:配置多種環境;default標簽可以指定使用的環境,可以達到快速切換環境的效果 --> <!-- environment 配置一個具體的環境信息;id代表當前環境的唯一標識;必須有兩個標簽transactionManager/type --> <!-- transactionManager:事務管理器 --> <!-- type:事務管理器的類型;JDBC(JdbcTransactionFactory)|MANAGED(ManagedTransactionFactory)|自定義事務管理器(實現TransactionFactory介面.type指定為全類名) --> <!-- JDBC:使用了 JDBC 的提交和回滾設置,依賴於從數據源得到的連接來管理事務範圍 --> <!-- MANAGED:不提交或回滾一個連接、讓容器來管理事務的整個生命周期(比如 JEE 應用伺服器的上下文) --> <!-- 自定義:實現TransactionFactory介面,type=全類名/別名 --> <!-- dataSource:數據源 --> <!-- type:數據源類型;UNPOOLED(UnpooledDataSourceFactory)|POOLED(PooledDataSourceFactory)|JNDI(JndiDataSourceFactory)|自定義數據源(實現DataSourceFactory介面,type是全類名) --> <!-- UNPOOLED:不使用連接池 --> <!-- POOLED:使用連接池 --> <!-- JNDI: 在EJB 或應用伺服器這類容器中查找指定的數據源 --> <!-- 自定義:實現DataSourceFactory介面,定義數據源的獲取方式 --> <!-- 實際開發中我們使用Spring管理數據源,併進行事務控制的配置來覆蓋上述配置 --> <environments default="development"> <environment id="test"> <transactionManager type="JDBC" /> <dataSource type=""> <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> <environment id="development"> <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>
8)資料庫廠商標識(databaseIdProvider)
MyBatis 可以根據不同的資料庫廠商執行不同的語句.
(1)添加select
<select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee" > select * from tbl_employee where id = #{id} </select> <select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee" databaseId="mysql" > select id,email from tbl_employee where id = #{id} </select> <select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee" databaseId="oracle"> select * from tbl_employee where id = #{id} </select>
(2)添加databaseIdProvider
<!-- databaseIdProvider:持多資料庫廠商 --> <!-- type="DB_VENDOR":VendorDatabaseIdProvider --> <!-- type:得到資料庫廠商的標識(驅動getDatabaseProductName()),mybatis就能根據資料庫廠商標識來執行不同的sql --> <databaseIdProvider type="DB_VENDOR"> <!-- 為不同的資料庫廠商起別名 --> <property name="MySQL" value="mysql"/> <property name="Oracle" value="oracle"/> <property name="SQL Server" value="sqlserver"/> </databaseIdProvider>
(3)配置properties(資料庫鏈接信息)
#Mysql jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis jdbc.username=root jdbc.password=root123 #Oracle orcl.driver=oracle.jdbc.OracleDriver orcl.url=jdbc:oracle:thin:@localhost:1521:orcl orcl.username=scott orcl.password=123456
(4)配置environments
<environments default="dev_mysql"> <environment id="dev_mysql"> <transactionManager type="JDBC"></transactionManager> <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> <environment id="dev_oracle"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${orcl.driver}" /> <property name="url" value="${orcl.url}" /> <property name="username" value="${orcl.username}" /> <property name="password" value="${orcl.password}" /> </dataSource> </environment> </environments>
9)映射器(mappers)
(1)mybatis-config.xml
<!-- !!!!!!!!!非常重要!!!!!!!!!!!! --> <!-- 將我們寫好的sql映射文件<EmployeeMapper.xml>一定要註冊到全局配置文件中 --> <!-- mappers:將sql映射註冊到全局配置中 --> <!-- mapper:註冊一個sql映射 --> <!-- resource(使用相對於類路徑的資源引用):引用類路徑下的sql映射文件 org/mybatis/builder/AuthorMapper.xml--> <!-- url(使用完全限定資源定位符):引用網路路徑或者磁碟路徑下的sql映射文件 file:///var/mappers/AuthorMapper.xml --> <!-- class(使用映射器介面實現類的完全限定類名):引用(註冊)介面 org.mybatis.builder.AuthorMapper --> <!-- 存在sql映射文件:映射文件名必須和介面同名,需配置文件與介面文件同一目錄下(com.atguigu.mybatis.dao.EmployeeMapper.java)和(com.atguigu.mybatis.dao.EmployeeMapper.xml --> <!-- 不存在sql映射文件:所有的sql都是利用註解寫在介面上(com.atguigu.mybatis.dao.EmployeeMapperAnnotation) --> <!-- package:批量註冊sql映射 --> <mappers> <!-- <mapper resource="com/batis/mapper/EmployeeMapper.xml" /> --> <!-- <mapper class="com.atguigu.mybatis.dao.EmployeeMapperAnnotation"/> --> <package name="com.atguigu.mybatis.dao"/> </mappers>
(2)select註解
public interface EmployeeMapperAnnotation { @Select("select * from tbl_employee where id=#{id}") public Employee getEmpById(Integer id); }
參考文檔:https://mybatis.org/mybatis-3/zh/configuration.html