MyBatis全局配置文件

一、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路徑被咱們叫作類文件的開始。

相關文章
相關標籤/搜索