MyBatis全局配置文件標籤詳解

1、全局配置文件結構

configuration 配置
  properties 屬性:能夠加載properties配置文件的信息
  settings 設置:能夠設置mybatis的全局屬性
  typeAliases 類型命名
  typeHandlers 類型處理器
  objectFactory 對象工廠
  plugins 插件
  environments 環境
    environment 環境變量
      transactionManager 事務管理器
      dataSource 數據源
  databaseIdProvider 數據庫廠商標識
  mappers 映射器java

 

  一、爲全局配置文件綁定dtd約束:
    1)聯網會自動綁定
    2)沒網的時候【/org/apache/ibatis/builder/xml/mybatis-3-config.dtd】:解壓mybatis 的jar包而後在eclipse中綁定mysql

        window——preperances——XML Catalog ——Add——設置key爲http://mybatis.org/dtd/mybatis-3-config.dtd,綁定本地文件位置location:spring

  二、 properties屬性sql

 1   <configuration>
 2     <!-- 
 3     1.mybatis可使用properties來引入外部properties配置文件的內容  4     resource:引入類路徑下的資源  5     url:引入網絡路徑或者磁盤路徑下的資源  6     -->
 7     <properties resource="jdbc.properties"></properties>
 8     <environments default="development">
 9       <environment id="development">
10         <transactionManager type="JDBC"/>
11         <dataSource type="POOLED">
12           <property name="driver" value="${jdbc.driver}"/>
13           <property name="url" value="${jdbc.url}"/>
14           <property name="username" value="${jdbc.user}"/>
15           <property name="password" value="${jdbc.passowrd}"/>
16         </dataSource>
17       </environment>
18     </environments>
19     <!-- 將咱們寫好的sql映射文件必定要註冊到全局配置文件中 -->
20     <mappers>
21     <mapper resource="EmployeeMapper.xml"/>
22     </mappers>
23   </configuration>

 

  三、settings包含不少重要的設置項數據庫

    setting:用來設置每個設置apache

    name:設置項名網絡

    value:設置項取值session

  舉例:駝峯式命名mybatis

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

    1).mapUnderscoreToCamelCase:自動完成數據表標準列名和持久化類標準屬性名之間的映射。oracle

      例如:last_name和lastName

  四、typeAliases:給類起別名【不建議你們使用別名】

    做用:A type alias is simply a shorter name for a Java type

 1   <!-- typeAliases:別名處理器,能夠爲咱們的java類型起別名,別名不區分大小寫 -->
 2   <typeAliases>
 3     <!-- typeAlias:爲某個java類型起別名  4     type:指定要起別名的類型全類名;默認別名就是類名小寫;  5     alias:執行新的別名  6     -->
 7     <typeAlias type="com.neuedu.mybatis.bean.Employee"/>
 8     <!-- 
 9     package:爲某個包下的全部類批量起別名 10     name:指定包名(爲當前包以及下面全部的後代包的每個類都起一個默認別名【類名小寫】) 11     -->
12     <package name="com.neuedu.mybatis.bean"/>
13     <!-- 批量起別名的狀況下,使用@Alias註解爲某個類型指定新的別名 -->
14   </typeAliases>

  雖然有這麼多的別名可使用:可是建議你們仍是使用全類名,看SQL語句是怎麼被封裝爲JAVA 對象的時候簡單!

  五、typeHandlers:類型處理器

      類型處理器:負責如何將數據庫的類型和java對象類型之間轉換的工具類

  六、environments【用於配置MyBatis的開發環境】

      environments:環境們,mybatis能夠配置多種環境,default指定使用某種環境。能夠達到快速切換環境。

        environment:配置一個具體的環境信息;必須有兩個標籤;id表明當前環境的惟一標識

          transactionManager:事務管理器

            type:事務管理器的類型;type="[JDBC|MANAGED]"),這兩個都是別名,在Configuration類中能夠查看具體類!可是Spring對事務的控制纔是最終的管理方案!

            JDBC:這個配置就是直接使用了JDBC的提交和回滾設置,它依賴於從數據源獲得的鏈接來管理事務。

            MANAGED:這個配置幾乎沒作什麼,它歷來不提交和回滾一個鏈接。而是讓容器來管理事務的整個生命週期。

            因此綜上:這裏若是要配置事務處理器,就配置爲JDBC。表示使用本地的JDBC事務。

            固然也能夠自定義事務管理器:只須要和人家同樣實現TransactionFactory接口,type指定爲全類名。

          dataSource:數據源

            type:type="[UNPOOLED|POOLED|JNDI]"

            unpooled:無數據庫鏈接池

            pooled:有數據庫鏈接池

            JNDI:自定義數據源:實現DataSourceFactory接口,type也是全類名

        可是咱們也說了,不管是事務管理器的配置仍是數據源的配置咱們都會使用spring來作,這裏只須要了解一下便可!

 1   <environments default="development">
 2     <environment id="test">
 3       <transactionManager type="JDBC"/>
 4       <dataSource type="POOLED">
 5         <property name="driver" value="${test.driver}"/>
 6         <property name="url" value="${test.url}"/>
 7         <property name="username" value="${test.user}"/>
 8         <property name="password" value="${test.passowrd}"/>
 9       </dataSource>
10     </environment>
11     <environment id="development">
12       <transactionManager type="JDBC"/>
13       <dataSource type="POOLED">
14         <property name="driver" value="${jdbc.driver}"/>
15         <property name="url" value="${jdbc.url}"/>
16         <property name="username" value="${jdbc.user}"/>
17         <property name="password" value="${jdbc.passowrd}"/>
18       </dataSource>
19     </environment>
20   </environments>

  補充:如何配置第三方數據源

    定製本身的第三方數據源,以下所示:

      要求:須要自定義一個類繼承UnpooledDataSourceFactory類,而後在構造器中初始化該對應的dataSource屬性,以下所示:

  自定義類爲:

1   public class C3P0DataSource extends UnpooledDataSourceFactory{ 2     public C3P0DataSource() { 3       this.dataSource = new ComboPooledDataSource(); 4     } 5   }

  MyBatis的全局配置文件爲:

 1   <environments default="development">
 2        <environment id="development">
 3             <transactionManager type="JDBC"/>
 4             <!--<dataSource type="POOLED">  5  <property name="driver" value="${jdbc.driver}"/>  6  <property name="url" value="${jdbc.url}"/>  7  <property name="username" value="${jdbc.username}"/>  8  <property name="password" value="${jdbc.password}"/>  9  </dataSource> -->
10             <!-- 配置使用第三方的數據源。屬性須要配置爲第三方數據源的屬性 -->
11             <dataSource type="com.neuedu.mapper.C3P0DataSource">
12                 <property name="driverClass" value="${jdbc.driver}"/>
13                 <property name="jdbcUrl" value="${jdbc.url}"/>
14                 <property name="user" value="${jdbc.username}"/>
15                 <property name="password" value="${jdbc.password}"/>
16             </dataSource>
17          </environment>
18   </environments>

  測試類:

 1   @Test  2   public void test02(){  3     //1.獲取sqlSessionFactory對象
 4     SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();  5     //2.利用sqlSessionFactory對象建立一個SqlSession對象
 6     SqlSession session = sqlSessionFactory.openSession();  7     System.out.println(session.getConnection());  8     //提交事務
 9     session.commit(); 10   }

  固然這裏須要加入c3p0的jar包;

    c3p0-0.9.2.1.jar

    mchange-commons-java-0.2.3.4.jar

  七、MyBatis的增刪改查標籤:

      <select></select>

      <insert></insert>

      <update></update>

      <delete></delete>
    例如:

1   <insert id="saveEmployee">
2     INSERT INTO tbl_employee(user_name,email,gender) VALUES(#{userName},#{email},#{gender}) 3   </insert>

  八、databaseIdProvider環境

    MyBatis is able to execute different statements depending on your database vendor. 

    ? MyBatis 能夠根據不一樣的數據庫廠商執行不一樣的語句

1   <databaseIdProvider type="DB_VENDOR">
2     <property name="SQL Server" value="sqlserver"/>
3     <property name="DB2" value="db2"/>
4     <property name="Oracle" value="oracle" />
5     <property name="MySQL" value="mysql" />
6   </databaseIdProvider>

    Type: DB_VENDOR

      –使用MyBatis提供的VendorDatabaseIdProvider解析數據庫 廠商標識。也能夠實現DatabaseIdProvider接口來自定義。

    Property-name:數據庫廠商標識

    Property-value:爲標識起一個別名,方便SQL語句使用

  這樣在執行不一樣數據庫的時候,就會執行不一樣數據庫的語句了!

    databaseId屬性:

      1).對於不一樣的數據庫,作不一樣的SQL操做時,SQL語句會有不一樣。例如:

        MySQL和Oracle的分頁[mysql分頁爲limit,而ORACLE分頁咱們使用rownumber]、插入主鍵的方式。

          MySQL:INSERT INTO tbl_employee(user_name,email,gender) VALUES(#{userName},#{email},#{gender})

          ORACLE:INSERT INTO employee(id,user_name,email) VALUES(test.seq.nextval,#{userName},#{email})

        因此要想使用ORACLE的自增序列還須要建立一個序列:

        以下所示:

          create sequence test_seq start with 1;

    這樣作的好處:在service層只須要調用一個mybatis的方法,而不須要關注底層選擇使用的數據庫。

      employeeDao.insert(employee);

  mybatis如何區分使用的是哪一個數據庫呢?使用databaseId屬性

    ①.在mybatis-config.xml文件中進行配置

1   <databaseIdProvider type="DB_VENDOR">
2     <property name="ORACLE" value="oracle"/>
3     <property name="MySQL" value="mysql"/>
4   </databaseIdProvider>

    ②.在mybatis的映射文件中使用databaseId來區分使用的是哪個數據庫

      在mybatis的全局配置文件配置了這個以後,咱們只須要在sql映射文件中經過在執行語句的標籤上加一個屬性databaseId便可!

1   <select id="getEmployeeById" resultType="emp">
2     select * from tbl_employee where id = #{id} 3   </select>
4   <select id="getEmployeeById" resultType="emp" databaseId="mysql">
5     select * from tbl_employee where id = #{id} 6   </select>
7   <select id="getEmployeeById" resultType="emp" databaseId="oracle">
8     select * from tbl_employee where id = #{id} 9   </select>

    全局配置文件

 1   <environments default="dev_mysql">
 2     <environment id="dev_oracle">
 3       <transactionManager type="JDBC"/>
 4       <dataSource type="POOLED">
 5         <property name="driver" value="${jdbc.oracle.driver}"/>
 6         <property name="url" value="${jdbc.oracle.url}"/>
 7         <property name="username" value="${jdbc.oracle.user}"/>
 8         <property name="password" value="${jdbc.oracle.passowrd}"/>
 9       </dataSource>
10     </environment>
11     <environment id="dev_mysql">
12       <transactionManager type="JDBC"/>
13       <dataSource type="POOLED">
14         <property name="driver" value="${jdbc.driver}"/>
15         <property name="url" value="${jdbc.url}"/>
16         <property name="username" value="${jdbc.user}"/>
17         <property name="password" value="${jdbc.passowrd}"/>
18       </dataSource>
19     </environment>
20   </environments>

  九、mapper映射

    <!-- mappers:將sql映射註冊到全局配置中 -->

       mapper:註冊一個sql映射

      註冊配置文件:

        resource:引用類路徑下的sql映射文件:mybatis/mapper/EmployeeMapper.xml

        url:引用網絡路徑下或者磁盤路徑下的sql映射文件:url="file:///var/mappers/AuthorMapper.xml"

    註冊接口

      class:引用(註冊)接口

        1.有sql映射文件,映射文件名必須和接口同名,而且放在與接口同一個目錄下;

        2.沒有sql映射文件,全部的sql都是利用註解寫在接口上;

      推薦:

        1.比較重要的,複雜的Dao接口咱們來寫sql映射文件

        2.不重要,見到的Dao接口爲了開發快速可使用註解

1   <mappers>
2     <mapper resource="mybatis/mapper/EmployeeMapper.xml"/>
3     <mapper class="com.neuedu.mybatis.mapper.EmployeeMapperAnnotation"/>
4     <!-- 批量註冊: 5       1.註解版確定是沒問題的 6       2.可是對於Mapper.xml映射文件和接口分開的,就須要保證在同一個包下了,不然找不到 -->
7     <package name="com.neuedu.mybatis.mapper"/>
8   </mappers>

  十、最後就是全局配置文件中標籤其實是有順序的!

相關文章
相關標籤/搜索