Mybatis核心配置文件SqlMapConfig.xml詳解

一租幕、Mybatis核心配置文件各標簽層級關(guān)系

image.png

二昵仅、properties標簽

properties標簽是用來加載Mybatis外部屬性的標簽隔崎,該標簽用來將內(nèi)部的配置外在化,即通過外部的配置來動態(tài)為內(nèi)部定義的屬性賦值挺身。具體方式如下:

1、使用配置文件加載屬性的三種方式

  • 使用resource加載相對路徑下配置文件中的屬性
<properties resource="jdbc.properties" ></properties>
  • 使用url加載絕對路徑下配置文件的屬性
<properties url="file:///Users/yinyw/Documents/WorkSpace/MybatisDemo/src/main/resources/jdbc.properties" ></properties>
  • 使用property加載屬性
<properties>
    <property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
    <property name="jdbc.url" value="jdbc:mysql://192.168.0.101:3306/mybatis?characterEncoding=utf8"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
</properties>

2锌仅、在配置文件中使用屬性

<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>

3章钾、在JAVA代碼中使用屬性

@Test
public void getProperty() throws IOException {
    InputStream resourceAsStream = Resources.getResourceAsStream("SqlConfiguration.xml");
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    Configuration configuration = sqlSessionFactory.getConfiguration();
    Properties properties = configuration.getVariables();
    String property = properties.getProperty("jdbc.driver");
    System.out.printf("jdbc.driver:" + property);
}

4墙贱、使用時的注意事項

  • resource和url不能同時使用,但是resource和property或者url和property能同時使用贱傀。
  • 如果同時使用了resource和property或者是url和property惨撇,并且兩者存在重復(fù)的屬性,那么以resource或url中的屬性為準府寒,因為mybatis在加載配置的屬性時魁衙,先加載property中的屬性,后加載resource或url中的屬性株搔,所以在加載后者時剖淀,前者的屬性就會被覆蓋。
  • 除了上述在xml文件中配置屬性之外纤房,還可以在JAVA代碼中為mybatis配置屬性纵隔,并且這種方式配置的屬性優(yōu)先級最高,也就是說如果配置文件中配置的屬性和下面JAVA代碼中配置的屬性重復(fù)了帆卓,那么以JAVA代碼中配置的屬性為準巨朦。具體使用如下所示:
@Test
public void getProperty() throws IOException {
    // 創(chuàng)建Properties對象,用來存放屬性
    Properties properties = new Properties();
    properties.setProperty("yinyw.mybatisDemo.port","9888");
    // 在mybatis構(gòu)建SqlSessionFactory時將Properties對象作為參數(shù)傳入進去
    InputStream resourceAsStream = Resources.getResourceAsStream("SqlConfiguration.xml");
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream,properties);
}
  • 屬性命名建議:項目名.模塊名.屬性名剑令。這樣做的好處在于易識別糊啡。

三、settings標簽

settings標簽主要用于改變MyBatis運行時的行為吁津。例如開啟二級緩存棚蓄、開啟延遲加載等。

1碍脏、配置參數(shù)如下表所示:

設(shè)置名 描述 有效值 默認值
cacheEnabled 全局性地開啟或關(guān)閉所有映射器配置文件中已配置的任何緩存梭依。 true/false true
lazyLoadingEnabled 延遲加載的全局開關(guān)。當開啟時典尾,所有關(guān)聯(lián)對象都會延遲加載役拴。 特定關(guān)聯(lián)關(guān)系中可通過設(shè)置 fetchType 屬性來覆蓋該項的開關(guān)狀態(tài)。 true/false false
aggressiveLazyLoading 開啟時钾埂,任一方法的調(diào)用都會加載該對象的所有延遲加載屬性河闰。 否則,每個延遲加載屬性會按需加載(參考 lazyLoadTriggerMethods)褥紫。 true/false false (在 3.4.1 及之前的版本中默認為 true)
multipleResultSetsEnabled 是否允許單個語句返回多結(jié)果集(需要數(shù)據(jù)庫驅(qū)動支持)姜性。 true/false true
useColumnLabel 使用列標簽代替列名。實際表現(xiàn)依賴于數(shù)據(jù)庫驅(qū)動髓考,具體可參考數(shù)據(jù)庫驅(qū)動的相關(guān)文檔部念,或通過對比測試來觀察。 true/false true
useGeneratedKeys 允許 JDBC 支持自動生成主鍵,需要數(shù)據(jù)庫驅(qū)動支持儡炼。如果設(shè)置為 true妓湘,將強制使用自動生成主鍵。盡管一些數(shù)據(jù)庫驅(qū)動不支持此特性射赛,但仍可正常工作(如 Derby)多柑。 true/false False
autoMappingBehavior 指定 MyBatis 應(yīng)如何自動映射列到字段或?qū)傩浴ONE 表示關(guān)閉自動映射楣责;PARTIAL 只會自動映射沒有定義嵌套結(jié)果映射的字段。 FULL 會自動映射任何復(fù)雜的結(jié)果集(無論是否嵌套)聂沙。 NONE/PARTIAL/FULL PARTIAL
autoMappingUnknownColumnBehavior 指定發(fā)現(xiàn)自動映射目標未知列(或未知屬性類型)的行為秆麸。NONE: 不做任何反應(yīng)WARNING: 輸出警告日志('org.apache.ibatis.session.AutoMappingUnknownColumnBehavior' 的日志等級必須設(shè)置為 WARN)FAILING: 映射失敗 (拋出 SqlSessionException) NONE/WARNING/FAILING NONE
defaultExecutorType 配置默認的執(zhí)行器。SIMPLE 就是普通的執(zhí)行器及汉;REUSE 執(zhí)行器會重用預(yù)處理語句(PreparedStatement)沮趣; BATCH 執(zhí)行器不僅重用語句還會執(zhí)行批量更新。 SIMPLE/REUSE/BATCH SIMPLE
defaultStatementTimeout 設(shè)置超時時間坷随,它決定數(shù)據(jù)庫驅(qū)動等待數(shù)據(jù)庫響應(yīng)的秒數(shù)房铭。 任意正整數(shù) 未設(shè)置 (null)
defaultFetchSize 為驅(qū)動的結(jié)果集獲取數(shù)量(fetchSize)設(shè)置一個建議值。此參數(shù)只可以在查詢設(shè)置中被覆蓋温眉。 任意正整數(shù) 未設(shè)置 (null)
defaultResultSetType 指定語句默認的滾動策略缸匪。(新增于 3.5.2) FORWARD_ONLY/SCROLL_SENSITIVE/SCROLL_INSENSITIVE/DEFAULT(等同于未設(shè)置) 未設(shè)置 (null)
safeRowBoundsEnabled 是否允許在嵌套語句中使用分(RowBounds)。如果允許使用則設(shè)置為 false类溢。 true/false False
safeResultHandlerEnabled 是否允許在嵌套語句中使用結(jié)果處理(ResultHandler)凌蔬。如果允許使用則設(shè)置為 false。 true/false True
mapUnderscoreToCamelCase 是否開啟駝峰命名自動映射闯冷,即從經(jīng)典數(shù)據(jù)庫列名 A_COLUMN 映射到經(jīng)典 Java 屬性名 aColumn砂心。 true/false False
localCacheScope MyBatis 利用本地緩存機制(Local Cache)防止循環(huán)引用和加速重復(fù)的嵌套查詢。 默認值為 SESSION蛇耀,會緩存一個會話中執(zhí)行的所有查詢辩诞。 若設(shè)置值為 STATEMENT,本地緩存將僅用于執(zhí)行語句纺涤,對相同 SqlSession 的不同查詢將不會進行緩存译暂。 SESSION/STATEMENT SESSION
jdbcTypeForNull 當沒有為參數(shù)指定特定的 JDBC 類型時,空值的默認 JDBC 類型洒琢。 某些數(shù)據(jù)庫驅(qū)動需要指定列的 JDBC 類型秧秉,多數(shù)情況直接用一般類型即可,比如 NULL衰抑、VARCHAR 或 OTHER象迎。 JdbcType 常量,常用值:NULL、VARCHAR 或 OTHER砾淌。 OTHER
lazyLoadTriggerMethods 指定對象的哪些方法觸發(fā)一次延遲加載啦撮。用逗號分隔的方法列表。 equals,clone,hashCode,toString
defaultScriptingLanguage 指定動態(tài) SQL 生成使用的默認腳本語言汪厨。 一個類型別名或全限定類名赃春。org.apache.ibatis.scripting.xmltags.XMLLanguageDriver。defaultEnumTypeHandler指定 Enum 使用的默認 TypeHandler 劫乱。(新增于 3.4.5) 一個類型別名或全限定類名织中。 org.apache.ibatis.type.EnumTypeHandler
callSettersOnNulls 指定當結(jié)果集中值為 null 的時候是否調(diào)用映射對象的 setter(map 對象時為 put)方法,這在依賴于 Map.keySet() 或 null 值進行初始化時比較有用衷戈。注意基本類型(int狭吼、boolean 等)是不能設(shè)置成 null 的。 true/false false
returnInstanceForEmptyRow 當返回行的所有列都是空時殖妇,MyBatis默認返回 null刁笙。 當開啟這個設(shè)置時,MyBatis會返回一個空實例谦趣。 請注意疲吸,它也適用于嵌套的結(jié)果集(如集合或關(guān)聯(lián))。(新增于 3.4.2) true/false false
logPrefix 指定 MyBatis 增加到日志名稱的前綴前鹅。 任何字符串 未設(shè)置
logImpl 指定 MyBatis 所用日志的具體實現(xiàn)摘悴,未指定時將自動查找。 SLF4J/LOG4J/LOG4J2/JDK_LOGGING/COMMONS_LOGGING/STDOUT_LOGGING/NO_LOGGING 未設(shè)置
proxyFactory 指定 Mybatis 創(chuàng)建可延遲加載對象所用到的代理工具嫡纠。 CGLIB/JAVASSIST JAVASSIST (MyBatis 3.3 以上)
vfsImpl 指定 VFS 的實現(xiàn) 自定義 VFS 的實現(xiàn)的類全限定名烦租,以逗號分隔。 未設(shè)置
useActualParamName 允許使用方法簽名中的名稱作為語句參數(shù)名稱除盏。 為了使用該特性叉橱,你的項目必須采用 Java 8 編譯,并且加上 -parameters 選項者蠕。(新增于 3.4.1) true/false true
configurationFactory 指定一個提供 Configuration 實例的類窃祝。 這個被返回的 Configuration 實例用來加載被反序列化對象的延遲加載屬性值。 這個類必須包含一個簽名為static Configuration getConfiguration() 的方法踱侣。(新增于 3.2.3) 一個類型別名或完全限定類名粪小。 未設(shè)置
shrinkWhitespacesInSql 從SQL中刪除多余的空格字符。請注意抡句,這也會影響SQL中的文字字符串探膊。 (新增于 3.5.5) true/false false
defaultSqlProviderType Specifies an sql provider class that holds provider method (Since 3.5.6). This class apply to the type(or value) attribute on sql provider annotation(e.g. @SelectProvider), when these attribute was omitted. A type alias or fully qualified class name Not set

2、一份完整的settings配置如下

<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>

四待榔、typeAliases標簽

typeAliases標簽用于為映射配置文件中Java類型的參數(shù)和返回值設(shè)置一個簡短的名字逞壁,即設(shè)置別名流济。別名的設(shè)置與XML配置相關(guān),其使用的意義在于減少全限定類名的冗余腌闯。

1绳瘟、mybatis默認支持的別名

別名 映射的類型
_byte byte
_long long
_short short
_int int
_integer int
_double double
_float float
_boolean boolean
string String
byte Byte
long Long
short Short
int Integer
integer Integer
double Double
float Float
boolean Boolean
date Date
decimal BigDecimal
bigdecimal BigDecimal
object Object
map Map
hashmap HashMap
list List
arraylist ArrayList
collection Collection
iterator Iterator

2、自定義別名的兩種方式

  • 使用typeAlias為單個的JAVA實體類定義別名姿骏,type屬性為JAVA實體類的全路徑糖声,alias為該實體類的別名。如果不寫alias屬性則默認為首字母小寫的JAVA實體類名分瘦。
<typeAliases>
    <typeAlias type="com.yinyw.china.pojo.Member" alias="member">
</typeAlias>
  • 使用package批量為某個路徑下的JAVA實體類定義別名蘸泻,該路徑下所有JAVA實體類的別名為首字母小寫的JAVA實體類名。
<typeAliases>
    <package name="com.yinyw.china.pojo"/>
</typeAliases>

3嘲玫、在映射文件中使用別名

<?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.yinyw.china.mapper.IMemberMapper">
    
    <insert id="saveMember" parameterType="member">
        INSERT INTO member (account,password,username) VALUES(#{account},#{password},#{username})
    </insert>
    
    <delete id="deleteMemberById" parameterType="java.lang.Integer">
        DELETE FROM member WHERE ID = #{id}
    </delete>

    <update id="updateMember" parameterType="member">
        UPDATE member SET account = #{account} , password = #{password} , username = #{username}
    </update>

    <select id="queryMember" parameterType="java.lang.Integer" resultType="member">
        SELECT id,account,password,username FROM member WHERE id = #{id}
    </select>
    
</mapper>

五蟋恬、typeHandlers標簽

六、objectFactory標簽

七趁冈、plugins標簽

八、environments標簽

environments標簽用于對Mybatis使用的環(huán)境進行配置拜马,環(huán)境配置實際上就是數(shù)據(jù)源的配置渗勘。MyBatis支持配置多個環(huán)境。例如俩莽,開發(fā)旺坠、測試和生產(chǎn)環(huán)境需要有不同的配置;或者想在具有相同 Schema 的多個生產(chǎn)數(shù)據(jù)庫中使用相同的 SQL 映射扮超。還有許多類似的使用場景在此就不一一例數(shù)了取刃。雖然mybatis支持配置多個環(huán)境,但是在使用時還是需要我們?yōu)閙ybatis指明使用哪個環(huán)境出刷,如果沒有指明使用哪個環(huán)境璧疗,mybatis就會使用我們配置的默認環(huán)境。

1馁龟、配置environments

<!-- 配置環(huán)境崩侠。default:默認使用的環(huán)境,配置的值必須為下面各環(huán)境id中的某一個 -->
<environments default="dev">
    <!-- 開發(fā)環(huán)境坷檩。id屬性:環(huán)境別名 -->
    <environment id="dev">
        <!-- 事務(wù)管理器 -->
        <transactionManager type="JDBC"></transactionManager>
        <!-- 數(shù)據(jù)源 -->
        <dataSource type="POOLED">
            <property name="driver" value="${jdbc.dev.driver}"/>
            <property name="url" value="${jdbc.dev.url}"/>
            <property name="username" value="${jdbc.dev.username}"/>
            <property name="password" value="${jdbc.dev.password}"/>
        </dataSource>
    </environment>
    <!-- 配置測試環(huán)境-->
    <environment id="sit">
        <transactionManager type="JDBC"></transactionManager>
        <dataSource type="POOLED">
            <property name="driver" value="${jdbc.sit.driver}"/>
            <property name="url" value="${jdbc.sit.url}"/>
            <property name="username" value="${jdbc.sit.username}"/>
            <property name="password" value="${jdbc.sit.password}"/>
        </dataSource>
    </environment>
</environments>

2却音、使用environments,下面是mybatis源碼中SqlSessionFactoryBuilder創(chuàng)建SqlSessionFactory提供的方法矢炼,我們通過調(diào)用下面的方法可以使用指定的環(huán)境或者是使用默認的環(huán)境

public class SqlSessionFactoryBuilder {
    public SqlSessionFactoryBuilder() {
    }

    // 使用默認的環(huán)境
    public SqlSessionFactory build(Reader reader) {
        return this.build((Reader)reader, (String)null, (Properties)null);
    }

    // 使用參數(shù)environment指定的環(huán)境
    public SqlSessionFactory build(Reader reader, String environment) {
        return this.build((Reader)reader, environment, (Properties)null);
    }

    // 使用默認的環(huán)境
    public SqlSessionFactory build(Reader reader, Properties properties) {
        return this.build((Reader)reader, (String)null, properties);
    }

    // 使用參數(shù)environment指定的環(huán)境
    public SqlSessionFactory build(Reader reader, String environment, Properties properties) {
        SqlSessionFactory var5;
        try {
            XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
            var5 = this.build(parser.parse());
        } catch (Exception var14) {
            throw ExceptionFactory.wrapException("Error building SqlSession.", var14);
        } finally {
            ErrorContext.instance().reset();

            try {
                reader.close();
            } catch (IOException var13) {
            }

        }

        return var5;
    }

    // 使用默認的環(huán)境
    public SqlSessionFactory build(InputStream inputStream) {
        return this.build((InputStream)inputStream, (String)null, (Properties)null);
    }

    // 使用參數(shù)environment指定的環(huán)境
    public SqlSessionFactory build(InputStream inputStream, String environment) {
        return this.build((InputStream)inputStream, environment, (Properties)null);
    }

    // 使用默認的環(huán)境
    public SqlSessionFactory build(InputStream inputStream, Properties properties) {
        return this.build((InputStream)inputStream, (String)null, properties);
    }

    // 使用參數(shù)environment指定的環(huán)境
    public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
        SqlSessionFactory var5;
        try {
            XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
            var5 = this.build(parser.parse());
        } catch (Exception var14) {
            throw ExceptionFactory.wrapException("Error building SqlSession.", var14);
        } finally {
            ErrorContext.instance().reset();

            try {
                inputStream.close();
            } catch (IOException var13) {
            }

        }

        return var5;
    }

    public SqlSessionFactory build(Configuration config) {
        return new DefaultSqlSessionFactory(config);
    }
}

3系瓢、transactionManager

transactionManager標簽通過type屬性來配置使用哪種事務(wù)管理器來管理Mybatis事務(wù)。type屬性支持如下兩種屬性值:

  • JDBC:這個配置就是直接使用了JDBC 的提交和回滾設(shè)置句灌,它依賴于從數(shù)據(jù)源得到的連接來管理事務(wù)作用域夷陋。配置方式如下:
<transactionManager type="JDBC"></transactionManager>
  • MANAGED:這個配置幾乎沒做什么。它從來不提交或回滾一個連接,而是讓容器來管理事務(wù)的整個生命周期(比如 JEE 應(yīng)用服務(wù)器的上下文)肌稻。默認情況下它會關(guān)閉連接清蚀,然而一些容器并不希望這樣,因此需要將closeConnection屬性設(shè)置為 false 來阻止它默認的關(guān)閉行為爹谭。
<transactionManager type="MANAGED">
    <property name="closeConnection" value="false"/>
</transactionManager>

4枷邪、dataSource

dataSource標簽通過type屬性來配置Mybatis如何連接數(shù)據(jù)庫。type屬性支持如下三種屬性值:

  • UNPOOLED:這個數(shù)據(jù)源的實現(xiàn)只是每次被請求時打開和關(guān)閉連接诺凡。配置方式如下:
<dataSource type="UNPOOLED">
    <!-- 這是JDBC驅(qū)動的Java類全限定名 -->
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <!-- 這是數(shù)據(jù)庫的 JDBC URL 地址东揣。 -->
    <property name="url" value="jdbc:mysql://192.168.0.101:3306/mybatis?characterEncoding=utf8"/>
    <!-- 登錄數(shù)據(jù)庫的用戶名 -->
    <property name="username" value="root"/>
    <!-- 登錄數(shù)據(jù)庫的密碼 -->
    <property name="password" value="root"/>
    <!-- 默認的連接事務(wù)隔離級別 -->
    <property name="defaultTransactionIsolationLevel" value=""/>
    <!-- 等待數(shù)據(jù)庫操作完成的默認網(wǎng)絡(luò)超時時間(單位:毫秒) -->
    <property name="defaultNetworkTimeout" value=""/>
</dataSource>
  • POOLED:這種數(shù)據(jù)源的實現(xiàn)利用“池”的概念將 JDBC 連接對象組織起來。配置方式如下:
<dataSource type="POOLED">
    <!-- 這是JDBC驅(qū)動的Java類全限定名 -->
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <!-- 這是數(shù)據(jù)庫的 JDBC URL 地址腹泌。 -->
    <property name="url" value="jdbc:mysql://192.168.0.101:3306/mybatis?characterEncoding=utf8"/>
    <!-- 登錄數(shù)據(jù)庫的用戶名 -->
    <property name="username" value="root"/>
    <!-- 登錄數(shù)據(jù)庫的密碼 -->
    <property name="password" value="root"/>
    <!-- 默認的連接事務(wù)隔離級別 -->
    <property name="defaultTransactionIsolationLevel" value=""/>
    <!-- 等待數(shù)據(jù)庫操作完成的默認網(wǎng)絡(luò)超時時間(單位:毫秒) -->
    <property name="defaultNetworkTimeout" value=""/>
    <!-- 在任意時間可存在的活動(正在使用)連接數(shù)量嘶卧,默認值:10 -->
    <property name="poolMaximumActiveConnections" value=""/>
    <!-- 任意時間可能存在的空閑連接數(shù) -->
    <property name="poolMaximumIdleConnections" value=""/>
    <!-- 在被強制返回之前,池中連接被檢出(checked out)時間凉袱,默認值:20000 毫秒(即 20 秒) -->
    <property name="poolMaximumCheckoutTime" value=""/>
    <!-- 這是一個底層設(shè)置芥吟,如果獲取連接花費了相當長的時間,連接池會打印狀態(tài)日志并重新嘗試獲取一個連接(避免在誤配置的情況下一直失敗且不打印日志)专甩,默認值:20000 毫秒(即 20 秒) -->
    <property name="poolTimeToWait" value=""/>
    <!-- 這是一個關(guān)于壞連接容忍度的底層設(shè)置钟鸵, 作用于每一個嘗試從緩存池獲取連接的線程。 如果這個線程獲取到的是一個壞的連接涤躲,那么這個數(shù)據(jù)源允許這個線程嘗試重新獲取一個新的連接棺耍,但是這個重新嘗試的次數(shù)不應(yīng)該超過 poolMaximumIdleConnections 與 poolMaximumLocalBadConnectionTolerance 之和。 默認值:3(新增于 3.4.5) -->
    <property name="poolMaximumLocalBadConnectionTolerance" value=""/>
    <!-- 發(fā)送到數(shù)據(jù)庫的偵測查詢种樱,用來檢驗連接是否正常工作并準備接受請求蒙袍。默認是“NO PING QUERY SET”,這會導(dǎo)致多數(shù)數(shù)據(jù)庫驅(qū)動出錯時返回恰當?shù)腻e誤消息 -->
    <property name="poolPingQuery" value=""/>
    <!-- 是否啟用偵測查詢嫩挤。若開啟害幅,需要設(shè)置 poolPingQuery 屬性為一個可執(zhí)行的 SQL 語句(最好是一個速度非常快的 SQL 語句)俐镐,默認值:false -->
    <property name="poolPingEnabled" value=""/>
    <!-- 配置 poolPingQuery 的頻率矫限。可以被設(shè)置為和數(shù)據(jù)庫連接超時時間一樣佩抹,來避免不必要的偵測叼风,默認值:0(即所有連接每一時刻都被偵測 — 當然僅當 poolPingEnabled 為 true 時適用) -->
    <property name="poolPingConnectionsNotUsedFor" value=""/>
</dataSource>
  • JNDI:這個數(shù)據(jù)源的實現(xiàn)是為了能在如 EJB 或應(yīng)用服務(wù)器這類容器中使用,容器可以集中或在外部配置數(shù)據(jù)源棍苹,然后放置一個 JNDI 上下文的引用无宿。配置方式如下:
<!-- 1、在Tomcat的安裝目錄下的conf/目錄中找到context.xml文件枢里,打開孽鸡,在里添加如下代碼: -->
<Resource
    name="jndi/mybatis" 數(shù)據(jù)源的名稱
    auth="Container" 數(shù)據(jù)源提供者
    type="javax.sql.DataSource" 數(shù)據(jù)源類型
    driverClassName="com.mysql.jdbc.Driver" 驅(qū)動類
    url="jdbc:mysql://192.168.0.101:3306/mybatis?characterEncoding=utf8" 連接url字符串
    username="root" 用戶名
    password="root" 密碼
    maxActive="20" 最大活動數(shù)
    maxIdle="10" 最大空閑數(shù)
    maxWait="10000" 最大等待時間/>

<!-- 2蹂午、在mybatis核心配置文件中配置dataSource的第一種寫法 -->
<dataSource type="JNDI">
    <!-- 不同的容器該值不同,java:/comp/env為tomcat容器的寫法 -->
    <property name="initial_context" value="java:/comp/env"/>
    <!-- 容器中配置jndi數(shù)據(jù)源的名稱 -->
    <property name="data_source" value="jdbc/mybatis"/>
</dataSource>

<!-- 3彬碱、在mybatis核心配置文件中配置dataSource的第二種寫法 -->
<dataSource type="JNDI">
    <property name="data_source" value="java:/comp/env/jdbc/mybatis"/>
</dataSource>

九豆胸、databaseIdProvider標簽

databaseIdProvider標簽為MyBatis支持多廠商SQL語句的執(zhí)行提供支持。MyBatis 可以根據(jù)不同的數(shù)據(jù)庫廠商執(zhí)行不同的語句巷疼,這種多廠商的支持是基于映射語句中的 databaseId 屬性晚胡。 MyBatis 會加載不帶 databaseId 屬性和帶有匹配當前數(shù)據(jù)庫 databaseId 屬性的所有語句。如果同時找到帶有 databaseId 和不帶 databaseId 的相同語句嚼沿,則后者會被舍棄估盘。 配置方式如下:

  • 在核心配置文件中配置數(shù)據(jù)庫廠商標志
<databaseIdProvider type="DB_VENDOR">
    <!-- name:數(shù)據(jù)庫廠商標志   value:別名 -->
    <property name="SQL Server" value="sqlserver" />
    <property name="MySQL" value="mysql" />
    <property name="DB2" value="db2" />
    <property name="Oracle" value="oracle" />
  </databaseIdProvider>
  • 在映射語句中添加數(shù)據(jù)庫廠商標志
<?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.yinyw.china.mapper.IMemberMapper">

    <select id="queryMember" parameterType="java.lang.Integer" resultType="member" databaseId="oracle">
        SELECT id,account,password,username FROM member WHERE id = #{id}
    </select>

    <select id="queryMember" parameterType="java.lang.Integer" resultType="member" databaseId="mysql">
        SELECT id,account,password,username FROM member WHERE id = #{id}
    </select>
    
</mapper>

十、mappers標簽

mappers標簽用于指定MyBatis映射文件的位置骡尽。mappers有如下四種配置方式:

  • 如果使用xml方式配置的映射遣妥,可以使用相對路徑來一個一個的指定映射文件的位置
<mappers>
    <mapper resource="mappers/MemberMapper.xml"></mapper>
</mappers>
  • 如果使用xml方式配置的映射,也可以使用絕對路徑來一個一個的指定映射文件的位置
<mappers>
    <mapper url="file:///Users/yinyw/Documents/WorkSpace/MybatisDemo/src/main/resources/mappers/MemberMapper.xml"></mapper>
</mappers>
  • 如果使用注解方式配置的映射攀细,則可以使用接口類的全路徑來一個一個的指定映射文件的位置
<mappers>
  <mapper class="com.yinyw.china.mapper.IMemberMapper"></mapper>
</mappers>
  • 不論使用xml還是注解的方式箫踩,都可以使用package來批量指定映射文件的路徑
<mappers>
    <package name="com.yinyw.china.mapper"/>
</mappers>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市谭贪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖鱼的,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凑阶,死亡現(xiàn)場離奇詭異衷快,居然都是意外死亡蘸拔,警方通過查閱死者的電腦和手機调窍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門邓萨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菊卷,“玉大人洁闰,你說我怎么就攤上這事万细⊙拍鳎” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵耸弄,是天一觀的道長计呈。 經(jīng)常有香客問我征唬,道長总寒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮年枕,結(jié)果婚禮上熏兄,老公的妹妹穿的比我還像新娘。我一直安慰自己桥状,他們只是感情好岛宦,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布砾肺。 她就那樣靜靜地躺著,像睡著了一般侠坎。 火紅的嫁衣襯著肌膚如雪实胸。 梳的紋絲不亂的頭發(fā)上番官,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天徘熔,我揣著相機與錄音酷师,去河邊找鬼山孔。 笑死,一個胖子當著我的面吹牛褐望,可吹牛的內(nèi)容都是我干的譬挚。 我是一名探鬼主播酪呻,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼玩荠,長吁一口氣:“原來是場噩夢啊……” “哼阶冈!你這毒婦竟也來了女坑?” 一聲冷哼從身側(cè)響起统舀,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤碉就,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后筋量,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桨武,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡呀酸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年七咧,在試婚紗的時候發(fā)現(xiàn)自己被綠了叮叹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛉顽。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡携冤,死狀恐怖曾棕,靈堂內(nèi)的尸體忽然破棺而出翘地,到底是詐尸還是另有隱情衙耕,我是刑警寧澤橙喘,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布厅瞎,位于F島的核電站初坠,受9級特大地震影響某筐,放射性物質(zhì)發(fā)生泄漏南誊。R本人自食惡果不足惜抄囚,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一幔托、第九天 我趴在偏房一處隱蔽的房頂上張望重挑。 院中可真熱鬧谬哀,春花似錦史煎、人聲如沸篇梭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袍患。三九已至,卻和暖如春涝焙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背妖滔。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留曲秉,地道東北人承二。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像负蚊,于是被迫代替她去往敵國和親家妆。 傳聞我的和親對象是個殘疾皇子揩徊,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容