MyBatis全局配置文件


1、properties(這個標簽基本上不太使用,了解)

1、mybatis可以使用properties來引入外部properties配置文件的內容
     resource是引入類路徑下的資源
     url:引入網絡網絡路徑或磁盤路徑下的資源

新建一個file文件命名為dbconfig.properties,內容填充如下

jdbc.driver = com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root

mybatis-config.xml文件內容修改如下,添加了properties標簽,將數據庫信息動態傳入。(11、16-19行進行了修改)

(在后面mybatis與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  1、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>

 

 

 

2、settings

 

2.1、mapUnderscoreToCamelCase的使用

之前由於字段名沒有和數據庫中的對應上,lastName獲取到的是null(如下圖),使用mapUnderscoreToCamelCase可以使用駝峰命名法,需要將默認值FALSE改為TRUE即可使用了。

將以下代表加入到全局配置mybatis-config.xml文件中

1  <settings>
2  <setting name="mapUnderscoreToCamelCase" value="TRUE"/>
3  </settings>

再次進行測試,可以取到值了

數據庫的字段是last_name,而javabean是lastName,這種情況下使用nice~規范~

(數據庫不區分大小寫,故命名規則是單詞間要加下划線;java區分大小寫,命名規范是駝峰命名法)

 

 

3、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,這樣可能會比較方便一些。

 

4、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以前的版本需要我們手動注冊這些處理器,以后的版本都是自動注冊的。

 

5、plugins

 插件

現在先簡單了解,到mybatis運行原理以后,對mybatis運行機制了解后詳細講解。

先將四大對象混個眼熟。

Executor 執行器

ParameHandler 參數處理器

ResultSetHandler 結果集處理器

StatementHandler  sql語句處理器

 

6、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

 

這里邊注冊了很多別名

 

 

 

 

 

7、databaseIdProvider

支持多個數據庫廠商

這個功能支持需要全局配置文件中添加

<databaseIdProvider type="DB_VENDOR" />

此標簽於本人可能用不到先不寫。。

 

8、mappers

 

mappers將sql映射注冊到全局配置中
     注冊配置文件:
  resource:應用類路徑下的sql映射文件
  url:引用網路路徑或者磁盤路徑下的sql音色文件
    file:///var/mapper/AuthorMapper.xml
 注冊接口
  class:引用(注冊)接口,
    1、有sql映射文件,映射文件名必須和接口同名,並且放在與接口同一目錄下
    2、沒有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路徑被我們叫做類文件的開始。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM