1. 程式人生 > 其它 >Mybatis配置解析(核心配置檔案)

Mybatis配置解析(核心配置檔案)

4、配置解析

4.1、核心配置檔案

我們只需要學重點的幾個,其餘作為了解

4.2、環境配置(environments)

Mybatis可以配置成適應多種環境

不過要記住:儘管可以配置多個環境,但每個SqlSessionFactory例項只能選擇一種環境

學會使用配置多套執行環境!

Mybatis預設的事務管理器就是JDBC,連線池:POOLED

4.3、屬性(properties)

通過properties我們可以引入外部配置檔案,例項如下:

編寫db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=root
<configuration>
    <!--properties必須放在配置檔案的第一個-->
    <!--引入外部配置檔案-->
    <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/kuang/dao/UserMapper.xml"/>
    </mappers>
</configuration>

4.4、類型別名(typeAliases)

第一種:

<!--可以給實體類起別名-->
<typeAliases>
    <typeAlias type="com.kuang.pojo.User" alias="User"/>
</typeAliases>

通過其別名,我們的返回值型別和引數型別就不需要寫那麼長了

<select id="getUserList" resultType="User">
    select * from mybatis.user
</select>

第二種:

也可以指定一個包名,Mybatis會在包名下搜尋需要的javabean,比如:

掃描實體類的包,他的預設為這個類的類名(首字母小寫)

<!--可以給實體類起別名-->
<typeAliases>
    <package name="com.kuang.pojo"/>
</typeAliases>xml

所以直接指定一個包,包下的所有類就都有了自己的別名,更加快捷

在指定包的情況下(就是使用第二種方式),若我們不想使用小寫作為他的別名,那麼我們可以通過註解繼續給類起別名,例如:

@Alias("hello")
public class User {

所以有兩種起別名的方式

如果實體類非常少,使用第一種方式

如果實體類非常多,建議使用第二種方式

4.5、設定

這是mybatis中極為重要的調整設定,他們會改變mybatis的執行時行為

4.6、其他配置

  • 型別處理器(typeHandlers)

  • 物件工廠(objectFactory)

  • 外掛(plugins)

4.7、對映器(mappers)

MapperRegistry:註冊登記我們的Mapper檔案

  • 方式一:【不會出錯】【推薦使用】【其餘兩個知道就好】
<mappers>
    <mapper resource="com/kuang/dao/UserMapper.xml"/>
</mappers>
  • 方式二:(有一定要求,使用class檔案繫結註冊)
<mappers>
    <mapper class="com.kuang.dao.UserMapper"/>
</mappers>

​ 注意點:

​ 介面和他的Mapper配置檔案必須同名

​ 介面和他的Mapper配置檔案必須在同一個包下

  • 方式三:使用掃描包進行注入繫結
<mappers>
    <package name="com.kuang.dao"/>
</mappers>

​ 注意點:

​ 介面和他的Mapper配置檔案必須同名

​ 介面和他的Mapper配置檔案必須在同一個包下

4.8、生命週期和作用域

生命週期和作用域是至關重要的,因為錯誤的使用會導致非常嚴重的併發問題

SqlSessionFactoryBuilder:

  • 一旦建立了SqlSessionFactory,就不需要它了
  • 區域性變數

SqlSessionFactory:

  • 說白了就是可以想象為:資料庫連線池
  • SqlSessionFactory一旦被建立就應該在應用的執行期間一直存在,沒有任何理由丟其它或重新建立另一個例項
  • 因此SqlSessionFactory的最佳作用域是應用作用域
  • 最簡單的就是使用單例模式或者靜態單例模式

SqlSession

  • 連線到連線池的一個請求
  • sqlsession的例項不是執行緒安全的,因此是不能被共享的,所以他的最佳的作用域是請求或方法作用域
  • 用完之後需要趕緊關閉,否則資源被佔用

這裡面的每一個Mapper就代表一個具體的業務。

樹越是嚮往高處的光亮,它的根就越要向下,向泥土向黑暗的深處。