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就代表一個具體的業務。

Tags: