Mybatis-03 配置解析

Mybatis-03 配置解析

配置解析

一、核心配置文件

mybatis-config.xmljava

configuration(配置)
properties(屬性)
settings(設置)
typeAliases(類型別名)
typeHandlers(類型處理器)
objectFactory(對象工廠)
plugins(插件)
environments(環境配置)
environment(環境變量)
transactionManager(事務管理器)
dataSource(數據源)
databaseIdProvider(數據庫廠商標識)
mappers(映射器)
{% endnote %}mysql

二、環境配置

MyBatis 能夠配置成適應多種環境git

不過要記住:spring

儘管能夠配置多個環境,但每一個 SqlSessionFactory 實例只能選擇一種環境。學會使用配置多套運行環境!sql

MyBatis默認的事務管理器就是JDBC,鏈接池:POOLED數據庫

三、屬性

咱們能夠經過properties屬性來實現引用配置文件mybatis

這些屬性都是可外部配置且可動態替換的,既能夠在典型的 Java 屬性文件中配置,亦可經過 properties 元素的子元素來傳遞。app

3.1 編寫一個配置文件

建立一個db.properties文件:ide

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8
jdbc.username=root           #數據庫帳號
jdbc.password=root           #數據庫密碼

3.2 在配置文件引入

<properties resource="db.properties">
    </properties>
    <!-- 和spring整合後 environments配置將廢除 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事務管理,事務控制由mybatis -->
            <transactionManager type="JDBC" />
            <!-- 數據庫鏈接池,由mybatis管理 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>

能夠直接引入外部文件 ,能夠在其中增長一些屬性配置url

若是兩個文件有同一字段,優先使用外部配置文件的!

類型別名

類型別名是爲 Java 類型設置一個短的名字。 存在的意義僅在於用來減小類徹底限定名的冗餘

1.類別名

當經過設置MyBatis配置文件 中的 typeAliases 屬性後,就能夠爲 sql 映射文件中的輸入 / 輸出參數設置類型別名,而後在sql 映射配置文件中使用該別名。

配置文件:

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

sql 映射配置文件,示例代碼以下:

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

2.別名拓展

建立的包裏可能也會存在其餘多個 JavaBean對象類,這時候一個一個配置別名很麻煩,就須要批量定義別名,批量指定很簡單,只要指定包名便可,其定義別名的規範就是對應包的類名首字母變爲小寫

配置文件:

<typeAliases>
    <package name="pojo"/>   
</typeAliases>

這時設置的包下的類就都有了別名,別名就是類名(首字母小寫)。

3.註解配置別名

經過註解的方式來配置別名,在須要配置別名的類前經過 @Alias 註解便可,參數就是別名名稱

示例代碼:

@Alias("user")
public class user{
    //其餘代碼
}

映射器

1.相對類路徑進行映射

<mappers >
    <mapper resource="xxx/xxx/xxxxMapper.xml"/>
</mappers>

2使用映射器接口實現類的徹底限定類名

<mappers >
    <mapper class="xxx.xxxx.xxx.xxxxMapper"/>
</mappers>

注意:接口和它的Mapper文件必須同名,且在同一個包

3.將包內的映射器接口實現所有註冊爲映射器

<mappers >
    <package name="xxx.xxx.dao"/>
</mappers>

注意:接口和它的Mapper文件必須同名,且在同一個包

解決屬性名和字段名不一致的問題

數據庫:

1

實體類:

2

能夠從上圖看出,數據庫中的pwd和實體類中的password不一樣,會致使如下結果:

3

解決方法

1.起別名

起別名,在字段名後用as對應屬性名,pwd as password

<mapper namespace="com.Dao.UserDao">
    <select id="getUserList" resultType="pojo.user" >
        select id,name,pwd as password from mybatis.user
    </select>
</mapper>

2.使用resultMap

<resultMap id="user" type="pojo.user">
        <!--column數據庫中的字段,property實體類中的屬性-->
        <id column="id" property="id"/>
        <result column="name" property="name" />
        <result column="pwd" property="password" />
</resultMap>

<select id="getUserList" resultMap="user" >
        select * from mybatis.user
</select>
4

Test時,會出現bug:

  • 首先是:2 字節的 UTF-8 序列的字節 2 無效
    • 這個問題是由於在xml文件中的中文註釋的問題,將xml文件的中文註釋刪除,解決
    • xml文件頂部的encoding=UTF-8改成encoding=UTF8能夠解決問題
  • 第二個是:數據庫鏈接問題
    • 設置setTimeZone=UTC,沒有解決
    • 設置set-on-borrow=true,沒有解決重啓mysql,沒有解決
    • 最終發現,mysql版本問題,而Maven導入的依賴包和mysql版本不一樣
  • resultMap 元素是 MyBatis 中最重要最強大的元素
  • ResultMap 的設計思想是,對於簡單的語句根本不須要配置顯式的結果映射,而對於複雜一點的語句只須要描述它們的關係就好了。

我的博客爲:
MoYu's Github Blog
MoYu's Gitee Blog

相關文章
相關標籤/搜索