最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis全局配置文件詳解

 更新時(shí)間:2021年07月09日 17:07:39   作者:程序dunk  
這篇文章主要介紹了mybatis 加載配置文件的方法,通過實(shí)例代碼給大家介紹了mybatis 加載配置文件的兩種方式,需要的朋友可以參考下

MyBatis全局配置文件

MyBatis 的配置文件包含了影響 MyBatis 行為甚深的設(shè)置(settings)和屬性(properties)信息。文檔的

頂層結(jié)構(gòu)如下:

  • configuration 配置
  • properties 屬性
  • settings 設(shè)置
  • typeAliases 類型命名
  • typeHandlers 類型處理器
  • objectFactory 對象工廠
  • plugins 插件
  • environments 環(huán)境
  • environment 環(huán)境變量
  • transactionManager 事務(wù)管理器
  • dataSource 數(shù)據(jù)源
  • databaseIdProvider 數(shù)據(jù)庫廠商標(biāo)識(shí)
  • mappers 映射器

properties 屬性

mybatis 可以使用properties來引入外部properties配置文件的內(nèi)容

resource:引入類路徑下的資源

url:引入網(wǎng)絡(luò)路徑或者磁盤路徑下的資源

<properties resource="dbconfig.properties"></properties>

如果屬性在不只一個(gè)地方進(jìn)行了配置,那么 MyBatis 將按照下面的順序來加載:

  • 在 properties 元素體內(nèi)指定的屬性首先被讀取。
  • 然后根據(jù) properties 元素中的 resource 屬性讀取類路徑下屬性文件或根據(jù) url 屬性指定的路徑讀取屬性文件,并覆蓋已讀取的同名屬性。 – 最后讀取作為方法參數(shù)傳遞的屬性,并覆蓋已讀取的同名屬性。

settings 設(shè)置

這是 MyBatis 中極為重要的調(diào)整設(shè)置,它們會(huì)改變MyBatis 的運(yùn)行時(shí)行為。

setting包含很多重要的設(shè)置項(xiàng)

setting:用來設(shè)置每一個(gè)設(shè)置項(xiàng)

name:設(shè)置項(xiàng)名

value:設(shè)置項(xiàng)的取值

mapUnderscoreToCamelCase:駝峰命名 last_name -> lastName

    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

typeAliases 類型命名

typeAliases:可以批量設(shè)置別名這個(gè)包下的每一個(gè)類

別名不區(qū)分大小寫

創(chuàng)建一個(gè)默認(rèn)的別名,就是簡單類名小寫

typeAlias:為某個(gè)java類型起別名

type:指定要起別名的類型全類名;默認(rèn)別名就是類名小寫:employee

alias:指定新的別名

package:為某個(gè)包下的所有類批量起別名

name:指定包名(為當(dāng)前包下以及下面所有的后代包的每一個(gè)類都起一個(gè)默認(rèn)的別名(類名小寫))

存在的問題:

假設(shè)bean包下有一個(gè)類Employee,同時(shí)在bean包下有一個(gè)子包也有一個(gè)類叫Employee,此時(shí)這兩個(gè)包的類名就會(huì)沖突,因此還可以使用注解的放上為類創(chuàng)建別名

@Alias("")

public class Employee{}

值得注意的是,MyBatis已經(jīng)為許多常見的 Java 類型內(nèi)建了相應(yīng)的類型別名。它們都是大小寫不敏感的,我們在起別名的時(shí)候千萬不要占用已有的別名。

environments 環(huán)境

mybatis可以配置多種環(huán)境 default指定使用某種環(huán)境,可以達(dá)到快速切換

environments:配置一個(gè)具體的環(huán)境信息;必須有兩個(gè)標(biāo)簽,id代表當(dāng)前環(huán)境的唯一標(biāo)識(shí)

transactionManager 事務(wù)管理器

type:事務(wù)管理器的類型 [JDBC(使用了 JDBC 的提交和回滾設(shè)置,依賴于從數(shù)據(jù)源得到的連接來管理事務(wù)范圍。)|MANAGED(不提交或回滾一個(gè)連接、讓容器來管理事務(wù)的整個(gè)生命周期(比如 JEE應(yīng)用服務(wù)器的上下文))]

JDBC:JdbcTransactionFactory

自定義事務(wù)管理器 實(shí)現(xiàn)TransactionFactory接口即可

dataSource 數(shù)據(jù)源

type:數(shù)據(jù)源的類型 [UNPOOLED(不使用連接池)|POOLED(使用連接池)|JNDI(在EJB 或應(yīng)用服務(wù)器這類容器中查找指定的數(shù)據(jù)源)]

自定義數(shù)據(jù)源 實(shí)現(xiàn)DataSourceFactory接口

實(shí)際開發(fā)中我們使用Spring管理數(shù)據(jù)源,并進(jìn)行事務(wù)控制的配置來覆蓋上述配置

databaseIdProvider 數(shù)據(jù)庫廠商標(biāo)識(shí)

databaseIdProvider: 可以根據(jù)不同的數(shù)據(jù)庫廠商執(zhí)行不同的語句。

type:數(shù)據(jù)庫類型 DB_VENDOR

作用就是得到數(shù)據(jù)庫廠商標(biāo)識(shí)(驅(qū)動(dòng)自帶的),mybatis就能根據(jù)數(shù)據(jù)庫廠商標(biāo)識(shí)來執(zhí)行不同的sql

MYSQL Oracle SQL Server

value:為標(biāo)識(shí)起一個(gè)別名,方便SQL語句使用databaseId屬性引用

DB_VENDOR

會(huì)通過 DatabaseMetaData#getDatabaseProductName() 返回的字符串進(jìn)行設(shè)置。由于通常情況下這個(gè)字符串都非常長而且相同產(chǎn)品的不同版本會(huì)返回不同的值,所以最好通過設(shè)置屬性別名來使其

變短

MyBatis匹配規(guī)則如下:

  • 如果沒有配置databaseIdProvider標(biāo)簽,那么databaseId=null
  • 如果配置了databaseIdProvider標(biāo)簽,使用標(biāo)簽配置的name去匹配數(shù)據(jù)庫信息,匹配上設(shè)置databaseId=配置指定的值,否則依舊為null
  • 如果databaseId不為null,他只會(huì)找到配置databaseId的sql語句
  • MyBatis 會(huì)加載不帶 databaseId 屬性和帶有匹配當(dāng)前數(shù)據(jù)庫databaseId 屬性的所有語句。如果同時(shí)找到帶有 databaseId 和不帶databaseId 的相同語句,則后者會(huì)被舍棄。

mappers 映射器

mapper:注冊一個(gè)sql映射

注冊配置文件

resource:引用類路徑下的sql映射文件

url:用網(wǎng)路路徑下的或者磁盤路徑下的sql映射文件

注冊接口

class:引應(yīng)用接口

  • 接口映射文件,映射文件名必須和接口同名,并且放在同一個(gè)目錄下
  • 沒有sql映射文件,所有的sql利用注解寫在接口上

注解寫在接口上

推薦:比較重要和復(fù)雜額Dao接口寫sql映射文件,不重要的簡單的為了開發(fā)快速可以使用注解

package:批量注冊

sql映射文件

namespace:名稱空間;指定為接口的全類名

id:唯一標(biāo)識(shí)

resultType:返回值類型

#{id}:從傳遞過來的參數(shù)中取出id值

<?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="school.xauat.mybatis.dao.EmployeeMapper">
    <select id="getEmpById" resultType="employee" >
        select * from tbl_employee where id = #{id}
    </select>
    <select id="getEmpById" resultType="employee" databaseId="mysql">
        select * from tbl_employee where id = #{id}
    </select>
    <select id="getEmpById" resultType="employee" databaseId="oracle">
        select * from tbl_employee where id = #{id}
    </select>
</mapper>

總結(jié)

1、接口是編程

原生: Dao -----> DaoImpl

Mybatis: Mapper -----> xxMapper.xml

2、SqlSession代表和數(shù)據(jù)庫的一次會(huì)話,用完必須關(guān)閉

3、SqlSession和connection一樣,都是非線程安全的。每次使用都應(yīng)該獲取新的對象

4、mapper接口沒有實(shí)現(xiàn)類,但是Mybatis會(huì)為這個(gè)接口生成一個(gè)代理對象(將接口和xml進(jìn)行綁定)

EmployeeMapper empMapper = SqlSession.getMapper(Employee.class);

5、兩個(gè)重要的配置文件

mybatis的全局配置文件;包含數(shù)據(jù)庫連接池信息,事務(wù)管理器信息,系統(tǒng)運(yùn)行信息

sql映射文件:保存了每一個(gè)SQL語句的映射信息

將sql抽取出來

相關(guān)文章

最新評(píng)論

瑞昌市| 龙门县| 屏东县| 东光县| 嵩明县| 河池市| 扎兰屯市| 和田县| 吉林省| 峡江县| 西峡县| 嘉禾县| 青川县| 渝北区| 黄大仙区| 龙岩市| 大足县| 长寿区| 惠来县| 毕节市| 开平市| 辰溪县| 射洪县| 英吉沙县| 新建县| 荣成市| 武夷山市| 临海市| 达拉特旗| 宣化县| 禄丰县| 汽车| 和硕县| 越西县| 永州市| 盐城市| 永清县| 剑阁县| 凤台县| 浪卡子县| 瑞丽市|