一、properties(這個標籤基本上不太使用,瞭解)java
一、mybatis可使用properties來引入外部properties配置文件的內容
resource是引入類路徑下的資源
url:引入網絡網絡路徑或磁盤路徑下的資源mysql
新建一個file文件命名爲dbconfig.properties,內容填充以下git
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root
mybatis-config.xml文件內容修改以下,添加了properties標籤,將數據庫信息動態傳入。(十一、16-19行進行了修改)github
(在後面mybatis與spring整合時,這一塊都交給了spring作)spring
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <!-- 7 一、mybatis可使用properties來引入外部properties配置文件的內容 8 resource是引入類路徑下的資源 9 url:引入網絡網絡路徑或磁盤路徑下的資源 10 --> 11 <properties resource="dbconfig.properties"></properties> 12 <environments default="development"> 13 <environment id="development"> 14 <transactionManager type="JDBC" /> 15 <dataSource type="POOLED"> 16 <property name="driver" value="${jdbc.driver}" /> 17 <property name="url" value="${jdbc.url}" /> 18 <property name="username" value="${jdbc.username}" /> 19 <property name="password" value="${jdbc.password}" /> 20 </dataSource> 21 </environment> 22 </environments> 23 <!-- 將咱們寫好的sql映射文件(EmployeeMapper.xml)必定要註冊到全局配置文件(mybatis-config.xml)中 --> 24 25 <mappers> 26 <mapper resource="EmployeeMapper.xml" /> 27 </mappers> 28 </configuration>
二、settingssql
2.一、mapUnderscoreToCamelCase的使用數據庫
以前因爲字段名沒有和數據庫中的對應上,lastName獲取到的是null(以下圖),使用mapUnderscoreToCamelCase可使用駝峯命名法,須要將默認值FALSE改成TRUE便可使用了。apache
將如下表明加入到全局配置mybatis-config.xml文件中網絡
1 <settings> 2 <setting name="mapUnderscoreToCamelCase" value="TRUE"/> 3 </settings>
再次進行測試,能夠取到值了mybatis
數據庫的字段是last_name,而javabean是lastName,這種狀況下使用nice~規範~
(數據庫不區分大小寫,故命名規則是單詞間要加下劃線;java區分大小寫,命名規範是駝峯命名法)
三、typeAliases
別名處理器
在xml文件中應用全類名的地方,可使用別名了,減小工做量
在EmployeeMapper.xml文件中,查詢結果的返回值爲com.atguigu.mybatis.bean.Employee,太長了
別名不區分帶小寫
處理方法以下:
(1)從Javabean中的Employee複製全類名放到全局配置文件mybatis-config.xml
1 <typeAliases> 2 <!--typeAlias:爲某個java類型起類名 3 type:指定要起別名的類型全類名;默認別名就是類型小寫:employee 4 alias:指定新的別名
5 6 --> 7 <typeAlias type="com.atguigu.mybatis.bean.Employee"/> 8 </typeAliases>
(2)在EmployeeMapper.xml文件中,將返回值改成默認別名即employee,再次測試,成功
或者使用alias指定別名
mybatis-config.xml,修改以下
1 <typeAliases> 2 <!--typeAlias:爲某個java類型起類名 3 type:指定要起別名的類型全類名;默認別名就是類型小寫:employee 4 alias:指定新的別名 5 6 --> 7 <typeAlias type="com.atguigu.mybatis.bean.Employee" alias="emp"/> 8 </typeAliases>
EmployeeMapper.xml修改以下
1 <select id="getEmpById" resultType="emp"> 2 select * from tb1_employee where id = #{id} 3 </select>
運行成功!
若是每次取別名,都用typeAliases就每次只能爲一個類型取別名,太麻煩了。使用批量取別名來解決這一問題
package:爲某個包內下的全部類批量取別名
name:指定包名(爲當前包及下面全部的的後代包的每一一個類都起一個默認別名(類名小寫)
將全局文件中代碼修改以下:
1 <typeAliases> 2 <package name="com.atguigu.mybatis.bean"/> 3 </typeAliases>
將EmpolyeeMapper.xml更改以下
1 <!-- resultType能夠寫成Employee或employee,別名不區分大小寫 --> 2 <select id="getEmpById" resultType="Employee"> 3 select * from tb1_employee where id = #{id} 4 </select>
若是使用package,容易產生別名衝突,從而報錯
解決方法:Javabean中使用一個註解,爲這個類名指定一個新的別名
@Alias("emp")
並修改EmployeeMapper.xml中的返回值,固然別名不區分大小寫
1 <select id="getEmpById" resultType="emp"> 2 select * from tb1_employee where id = #{id} 3 </select>
運行成功!
根據文檔查看,咱們能夠看到不少已經取好的別名
咱們本身設置的別名必定不能和下面的別名重複
寫全類名比較適合查看按住crtl+鼠標點擊,便可查看javabean,這樣可能會比較方便一些。
四、typeHandlers(粗略介紹,後面再仔細看)
類型處理器,在數據類型和java映射時使用
日期處理:
NOTE If you use classes provided by JSR-310(Date and Time API), you can use the mybatistypehandlers-jsr310.(官方文檔中的一句話)
官方下載地址:https://github.com/mybatis/typehandlers-jsr310
想要更豐富的類型這樣來註冊
<typeHandlers> <typeHandler handler="org.apache.ibatis.type.InstantTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.LocalDateTimeTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.LocalDateTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.LocalTimeTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.OffsetDateTimeTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.OffsetTimeTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.ZonedDateTimeTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.YearTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.MonthTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.YearMonthTypeHandler" /> <typeHandler handler="org.apache.ibatis.type.JapaneseDateTypeHandler" /> </typeHandlers>
可是在mybatis3.4之前的版本須要咱們手動註冊這些處理器,之後的版本都是自動註冊的。
五、plugins
插件
如今先簡單瞭解,到mybatis運行原理之後,對mybatis運行機制瞭解後詳細講解。
先將四大對象混個眼熟。
Executor 執行器
ParameHandler 參數處理器
ResultSetHandler 結果集處理器
StatementHandler sql語句處理器
六、environments
environments:環境們,mybatis能夠配置多種環境,default指定使用某種環境,能夠達到快速切換
environment:配置一個具體的環境信息,必須有transactionManager和dataSource才完整,id表明當前環境的惟一表示
transactionManager:事務管理器;
type:事務管理器的類型,有JDBC(JdbcTransactionFactory)|MANAGED(ManagedTransactionFactory);
自定義事務管理器:實現TransactionFactory接口,type指定爲全類名
dataSource:數據源;
type:數據源類型;UNPOOLED(UnpooledDataSourceFactory)|POOLED(PooledDataSourceFactory)|JNDI(JndiDataSourceFactory)
自定義數據源:實現DataSourceFactory接口,type指定爲全類名
Ctrl + Shift + T:快捷鍵打開openType,搜索configuration
這裏邊註冊了不少別名
七、databaseIdProvider
支持多個數據庫廠商
這個功能支持須要全局配置文件中添加
<databaseIdProvider type="DB_VENDOR" />
此標籤於本人可能用不到先不寫。。
八、mappers
mappers將sql映射註冊到全局配置中
註冊配置文件:
resource:應用類路徑下的sql映射文件
url:引用網路路徑或者磁盤路徑下的sql音色文件
file:///var/mapper/AuthorMapper.xml
註冊接口
class:引用(註冊)接口,
一、有sql映射文件,映射文件名必須和接口同名,而且放在與接口同一目錄下
二、沒有sql映射文件,全部的sql都是利用註解寫在接口上;
resource屬性:
新建一個包,將EmployeeMapper.xml放進去,而後修改配置文件內容resource改成全類名
1 <mappers> 2 <mapper resource="mybatis/mapper/EmployeeMapper.xml" /> 3 </mappers>
class屬性:
EmployeeMapperAnnotation接口代碼:
1 package com.atguigu.mybatis.dao; 2 3 import org.apache.ibatis.annotations.Select; 4 5 import com.atguigu.mybatis.bean.Employee; 6 7 public interface EmployeeMapperAnnotation { 8 9 @Select("select * from tb1_employee where id = #{id}") 10 public Employee getEmpById(Integer id); 11 }
在測試文件中再寫一個測試方法
1 public void test02() throws IOException { 2 SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); 3 SqlSession openSession = sqlSessionFactory.openSession(); 4 5 try { 6 EmployeeMapperAnnotation mapper = openSession.getMapper(EmployeeMapperAnnotation.class); 7 Employee empById = mapper.getEmpById(1); 8 System.out.println(empById); 9 }finally { 10 openSession.close(); 11 } 12 13 }
運行成功!
不過仍是寫在xml文件上便於維護,推薦必要重要的Dao接口寫sql映射文件,不重要的簡單的Dao接口爲了開發快速可使用註解。
因爲mapper都是一個一個註冊的,比較麻煩,故而還有批量註冊的方法。
使用package,name屬性中要寫包名,基於註解版沒有問題,可是,寫了映射文件的可能找不到,故而將映射文件放入同一個包下,文件名和接口名是同樣的,這樣才能夠批量註冊。
之後都將接口和xml放在一塊兒,可是爲了規整,在conf下建一個與接口文件同樣路徑的包
雖然看起來不是在一個路徑下,實際打開源碼包都都會放在bin的路徑下,bin路徑被咱們叫作類文件的開始。