MyBatis 配置詳解

xiezhr發表於2023-05-05

mybatis-config.xml 核心配置檔案

mybatis-config.xml 包含的內容如下

  • configuration(配置)
  • properties(屬性)
  • settings(設定)
  • typeAliases(型別別名)
  • typeHandlers(型別處理器)
  • objectFactory(物件工廠)
  • plugins(外掛)
  • environments(環境配置)
  • environment(環境變數)
  • transactionManager(事務管理器)
  • dataSource(資料來源)
  • databaseIdProvider(資料庫廠商標識)
  • mappers(對映器)

注意元素節點的順序!順序不對會報錯

1. environments元素

<environments default="development">
 <environment id="development">
   <transactionManager type="JDBC">
     <property name="..." value="..."/>
   </transactionManager>
   <dataSource type="POOLED">
     <property name="driver" value="${driver}"/>
     <property name="url" value="${url}"/>
     <property name="username" value="${username}"/>
     <property name="password" value="${password}"/>
   </dataSource>
 </environment>
 <environment id="test">
   <transactionManager type="JDBC">
     <property name="..." value="..."/>
   </transactionManager>
   <dataSource type="POOLED">
     <property name="driver" value="${driver}"/>
     <property name="url" value="${url}"/>
     <property name="username" value="${username}"/>
     <property name="password" value="${password}"/>
   </dataSource>
 </environment>
</environments>
  • environments配置mybatis 多套環境,將sql 對映到多個不同的資料庫上,必須指定一個預設環境,即default="development"

1.1 子元素environment

其中dataSource 資料來源(共三種內建的資料來源型別)

        type="[UNPOOLED|POOLED|JNDI]")
  • unpooled:這個資料來源的實現只是每次被請求時開啟和關閉連線
  • pooled:這種資料來源的實現利用“池”的概念將 JDBC 連線物件組織起來 , 這是一種使得併發 Web 應用快速響應請求的流行處理方式。
  • jndi:這個資料來源的實現是為了能在如 Spring 或應用伺服器這類容器中使用,容器可以集中或在外部配置資料來源,然後放置一個 JNDI 上下文的引用。
    注: 資料來源也有很多第三方的實現,比如dbcp,c3p0,druid等等....

1.2 transactionManager 事務管理器(共兩種)

        <transactionManager type="[ JDBC | MANAGED ]"/>

2. mappers 元素(定義對映SQL語句檔案)

主要用於找到sql語句的檔案在哪裡?可以使用不同的方式引用sql語句 具體的引用方式如下

  • 使用相對路徑引入sql語句的檔案
<!-- 使用相對於類路徑的資源引用 -->
<mappers>
 <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
  • 使用完全限定資源定位符(URL)
<!-- 使用完全限定資源定位符(URL) -->
<mappers>
 <mapper url="file:///var/mappers/AuthorMapper.xml"/>
</mappers>
  • 使用對映器介面實現類的完全限定類名,需要配置檔名稱和介面名稱一致,並且位於同一目錄下
<!--
使用對映器介面實現類的完全限定類名需要配置檔名稱和介面名稱一致,並且位於同一目錄下
-->
<mappers>
 <mapper class="org.mybatis.builder.AuthorMapper"/>
</mappers>
  • 將包內的對映器介面實現全部註冊為對映器但是需要配置檔名稱和介面名稱一致,並且位於同一目錄下
<!--
將包內的對映器介面實現全部註冊為對映器.但是需要配置檔名稱和介面名稱一致,並且位於同一目錄下
-->
<mappers>
 <package name="org.mybatis.builder"/>
</mappers>

**mapper配置檔案
主要用用關聯dao介面中的方法,並書寫sql語句 相當於實現了介面中的各個方法

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.xiezhr.dao.UserMapper">
    <select id="getUserList" resultType="com.xiezhr.pojo.User">
     select * from mybatis.user;
    </select>

    <insert id="addUser" parameterType="com.xiezhr.pojo.User">
        insert into mybatis.user values(#{id},#{name},#{pwd})
    </insert>

    <update id="updateUserById" parameterType="int">
        update mybatis.user set name='小頭爸爸' where id=#{id}
    </update>

    <delete id="deleteUserById" parameterType="int">
        delete from mybatis.user where id=#{id}
    </delete>
</mapper>

3.properties

  • 我們都知道在java開發中,透過properties檔案來配置一些引數。這我們就要透過db.properties檔案來配置連線資料庫的各個屬性

具體步驟如下

(1)編寫db.properties 檔案

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8
username=root
password=123456

(2)在mybatis核心配置檔案中加在外部配置檔案來連線資料庫

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="db.properties"/>
 
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/xiezhr/Dao/UserMapper.xml"></mapper>
    </mappers>
</configuration>

4. typeAliases(定義別名)

  • 型別別名是為java型別這隻一個短的名字。意義在於用來減少過長類名的冗餘

(1)自定義javabean別名

<typeAliases>
        <typeAlias type="com.xiezhr.pojo.User" alias="user"/>
</typeAliases>

如上配置之後就可以在任何地方用user 代替 com.xiezhr.pojo.User配置別名也可按照下面方式配置

(2)配置所有com.xiezhr.pojo 包下的Javabean別名為小寫的類名

<typeAliases>
   <package name="com.xiezhr.pojo"/>
</typeAliases>

透過上述配置之後,以下的xml即等價

<select id="getUserList" resultType="user">
     select * from mybatis.user;
</select>
<select id="getUserList" resultType="com.xiezhr.pojo.user">
     select * from mybatis.user;
</select>

其他配置【設定】

設定常用的有如下幾個

  • 懶載入
  • 日誌實現
  • 快取的開啟與關閉
    下面是一個完整的setting元素示例
<settings>
 <setting name="cacheEnabled" value="true"/>
 <setting name="lazyLoadingEnabled" value="true"/>
 <setting name="multipleResultSetsEnabled" value="true"/>
 <setting name="useColumnLabel" value="true"/>
 <setting name="useGeneratedKeys" value="false"/>
 <setting name="autoMappingBehavior" value="PARTIAL"/>
 <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
 <setting name="defaultExecutorType" value="SIMPLE"/>
 <setting name="defaultStatementTimeout" value="25"/>
 <setting name="defaultFetchSize" value="100"/>
 <setting name="safeRowBoundsEnabled" value="false"/>
 <setting name="mapUnderscoreToCamelCase" value="false"/>
 <setting name="localCacheScope" value="SESSION"/>
 <setting name="jdbcTypeForNull" value="OTHER"/>
 <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

相關文章