欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis?核心組件Configuration實(shí)例詳解

 更新時(shí)間:2023年08月02日 08:45:51   作者:低吟不作語(yǔ)  
Configuration用于描述 MyBatis 的主配置信息,其他組件需要獲取配置信息時(shí),直接通過 Configuration 對(duì)象獲取,這篇文章主要介紹了MyBatis核心組件Configuration,需要的朋友可以參考下

概述

Mybatis 的核心組件如下所示:

  • Configuration:用于描述 MyBatis 的主配置信息,其他組件需要獲取配置信息時(shí),直接通過 Configuration 對(duì)象獲取。除此之外,MyBatis 在應(yīng)用啟動(dòng)時(shí),將 Mapper 配置信息、類型別名、TypeHandler 等注冊(cè)到 Configuration 組件中,其他組件需要這些信息時(shí),也可以從 Configuration 對(duì)象中獲取
  • MappedStatement:用于描述 Mapper 中的 SQL 配置信息,是對(duì) Mapper XML 配置文件中 <select|update|delete|insert> 等標(biāo)簽或者 @Select/@Update 等注解配置信息的封裝
  • SqlSession:是 MyBatis 提供的面向用戶的 API,表示和數(shù)據(jù)庫(kù)交互時(shí)的會(huì)話對(duì)象,用于完成數(shù)據(jù)庫(kù)的增刪改查功能。SqlSession 是 Executor 組件的外觀,目的是對(duì)外提供易于理解和使用的數(shù)據(jù)庫(kù)操作接口
  • Executor:MyBatis 的 SQL 執(zhí)行器,MyBatis 對(duì)數(shù)據(jù)庫(kù)所有的增刪改查操作都是由 Executor 組件完成的
  • StatementHandler:封裝了對(duì) JDBC Statement 對(duì)象的操作,比如為 Statement 對(duì)象設(shè)置參數(shù),調(diào)用 Statement 接口提供的方法與數(shù)據(jù)庫(kù)交互等等
  • ParameterHandler:當(dāng) MyBatis 框架使用的 Statement 類型為 CallableStatcment 和 PreparedStatement 時(shí),ParamelerHandler 用于為 Statement 對(duì)象參數(shù)占位符設(shè)置值
  • ResultSetHandler:ResultSetHandler 封裝了對(duì) JDBC 的 ResultSet 對(duì)象操作,當(dāng)執(zhí)行 SQL 類型為 SELECT 語(yǔ)句時(shí),ResultSetHandler 用于將查詢結(jié)果轉(zhuǎn)換成 Java 對(duì)象
  • TypeHandler:TypeHandler 是 MyBatis 中的類型處理器,用于處理 Java 類型與 JDBC 類型之間的映射,它的作用主要體現(xiàn)在能夠根據(jù) Java 類型調(diào)用 PreparedStatement 或 CallableStatement 對(duì)象對(duì)應(yīng)的 set 方法為 Statement 對(duì)象設(shè)置值,而且能夠根據(jù) Java 類型調(diào)用 ResultSet 對(duì)象對(duì)應(yīng)的 get 獲取SQL執(zhí)行結(jié)果

在使用 MyBatis 時(shí),我們使用到 SqlSession 組件,它是用戶層面的 API。實(shí)際上 SqlSession 是Executor 組件的外觀,目的是為用戶提供更友好的數(shù)據(jù)庫(kù)操作接口,這是設(shè)計(jì)模式中外觀模式的典型應(yīng)用。真正執(zhí)行 SQL 操作的是 Executor 組件,Executor 可以理解為 SQL 執(zhí)行器,它會(huì)使用 StatementHandler 組件對(duì) JDBC 的 Statement 對(duì)象進(jìn)行操作。當(dāng) Statement 類型為 CallableStatement 和 PreparedStatement 時(shí),會(huì)通過 ParameterHandler 組件為參數(shù)占位符賦值。ParameterHandler 組件中會(huì)根據(jù) Java 類型找到對(duì)應(yīng)的 TypeHandler 對(duì)象,TypeHandler 會(huì)通過 Statement 對(duì)象提供的set 方法為 Statement 對(duì)象中的參數(shù)占位符設(shè)置值。StatementHandler 組件使用 JDBC 中的 Statement 對(duì)象與數(shù)據(jù)庫(kù)完成交互后,當(dāng) SQL 語(yǔ)句類型為 SELECT 時(shí),MyBatis 通過 ResultSetHandler 組件從 Statement 對(duì)象中獲取 ResultSet 對(duì)象,然后將 ResultSet 對(duì)象轉(zhuǎn)換為 Java 對(duì)象

Configuration

MyBatis 框架的配置信息有兩種,一種是配置 MyBatis 框架屬性的主配置文件;另一種是配置執(zhí)行 SQL 語(yǔ)句的 Mapper 配置文件。Configuration 的作用是描述 MyBatis 主配置文件的信息。Configuration 類中定義了一系列的屬性用來控制MyBatis 運(yùn)行時(shí)的行為,這些屬性代碼如下:

public class Configuration {
	protected boolean safeRowBoundsEnabled;
	protected boolean safeResultHandlerEnabled = true;
	protected boolean mapUnderscoreToCamelCase;
	protected boolean aggressivelazyLoading;
	protected boolean multipleResultSetsEnabled = true;
	protected boolean useGeneratedKeys;
	protected boolean useColumnLabel = true;
	.......
}

這些屬性的值可以在MyBatis主配置文件中通過 <setting> 標(biāo)簽指定,例如:

<settings>
	<setting name="cacheEnabled" value="true"/>
	<setting name="lazyLoadingEnabled" value="true"/>
</settings>

所有屬性的作用及配置說明參考如下:

  • cacheEnabled:是否開啟 Mapper 緩存,即二級(jí)緩存,默認(rèn) true
  • lazyLoadingEnabled:延遲加載的全局開關(guān)。當(dāng)開啟時(shí),所有關(guān)聯(lián)對(duì)象都會(huì)延遲加載。特定關(guān)聯(lián)關(guān)系中可通過設(shè)置 fetchType 屬性來覆蓋該項(xiàng)的開關(guān)狀態(tài),默認(rèn) false
  • aggressiveLazyLoading:當(dāng)開啟時(shí),任何方法的調(diào)用都會(huì)加載該對(duì)象的所有屬性。否則,每個(gè)屬性會(huì)按需加載,默認(rèn) false,3.4.1 之前默認(rèn)為 true
  • multipleResultSetsEnabled:是否允許單一語(yǔ)句返回多結(jié)果集,默認(rèn) true
  • useColumnLabel:使用列標(biāo)簽代替列名,不同的驅(qū)動(dòng)在這方面會(huì)有不同的表現(xiàn),默認(rèn) true
  • useGeneratedKeys:允許 JDBC 支持自動(dòng)生成主鍵,需要驅(qū)動(dòng)兼容。如果設(shè)置為 true,則這個(gè)設(shè)置強(qiáng)制使用自動(dòng)生成主鍵,盡管一些驅(qū)動(dòng)不能兼容,但仍可正常工作,默認(rèn) false
  • autoMappingBehavior:指定 MyBatis 應(yīng)該如何自動(dòng)映射列到 Java 實(shí)體屬性。NONE 表示取消自動(dòng)映射,PARTIAL 只會(huì)自動(dòng)映射沒有定義嵌套結(jié)果集映射的結(jié)果集。FULL 會(huì)自動(dòng)映射任意復(fù)雜的結(jié)果集(無論是否嵌套),默認(rèn) PARTIAL
  • autoMappingUnknownColumnBehavior:指定發(fā)現(xiàn)自動(dòng)映射目標(biāo)未知列(或者未知屬性)的行為。NONE:不做任何反應(yīng),WARNING:輸出提醒日志,F(xiàn)AILING:映射失敗,拋出異常,默認(rèn) NONE
  • defaultExecutorType:配置默認(rèn)的 Executor 類型,SIMPLE 就是普通的 Executor;REUSE 會(huì)復(fù)用 Statement 對(duì)象;BATCH 會(huì)批量執(zhí)行所有更新語(yǔ)句,默認(rèn) SIMPLE
  • defaultStatementTimeout:設(shè)置超時(shí)時(shí)間,它決定驅(qū)動(dòng)等待數(shù)據(jù)庫(kù)響應(yīng)的秒數(shù),可以說任意正整數(shù),默認(rèn)為 null 未設(shè)置
  • defaultFetchSize:默認(rèn)的 FetchSize,用于設(shè)置 Statement 對(duì)象的 fetchSize 屬性,用于限制從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)的最大行數(shù),默認(rèn)為 null 未設(shè)置
  • SafeRowBoundsEnabled:允許在嵌套語(yǔ)句中使用分頁(yè)(RowBounds),如果允許使用,則設(shè)置為 false,默認(rèn) false
  • safeResultHandlerEnabled:允許在嵌套語(yǔ)句中使用分頁(yè)(ResultHandler),如果允許使用,則設(shè)置為 false,默認(rèn) false
  • mapUnderscoreToCamelCase:是否開啟自動(dòng)駝峰命名規(guī)則映射,即從經(jīng)典數(shù)據(jù)庫(kù)列名 A_COLUMN 到經(jīng)典 Java 屬性名 aColumn 的映射
  • localCacheScope:MyBatis 利用本地緩存機(jī)制防止循環(huán)引用和加速重復(fù)查詢。默認(rèn)值為 SESSION,這種情況下會(huì)緩存?zhèn)€會(huì)話中執(zhí)行的所有查詢。若設(shè)置值為 STATEMENT,本地會(huì)話僅用在語(yǔ)句執(zhí)行上,對(duì)相同 SqlSession 的不同調(diào)用將不會(huì)共享數(shù)據(jù)
  • jdbcTypeForNuIl:當(dāng)沒有為參數(shù)指定 JDBC 類型時(shí),指定 JDBC 類型的值為null。一些驅(qū)動(dòng)需要指定 JDBC 類型,多數(shù)情況下直接用一般類型即可,比如 NULL、VARCHAR 或 OTHER,默認(rèn) OTHER
  • lazyLoadTriggerMethods:指定哪個(gè)對(duì)象的方法會(huì)觸發(fā)一次延遲加載,參數(shù)是用逗號(hào)分割的方法列表
  • defaultScriptingLanguage:指定動(dòng)態(tài) SQL 生成的默認(rèn)語(yǔ)言,參數(shù)值為一個(gè)類型別名或完全限定類名,默認(rèn)值:org.apache.ibatis.XMLLanguageDriver
  • defaultEnumTypeHandler:指定 Java 枚舉類型使用的默認(rèn) TypeHandler,默認(rèn)值:org.apache.ibatis.type.EnumTypeHandler
  • callSettersOnNulls:指定當(dāng)結(jié)果集中的值為 null 的時(shí)候是否調(diào)用映射對(duì)象的Setter方法,這對(duì)于有 Map.keySet() 依賴或 null 值初始化的時(shí)候是有用的。注意基本類型(int、boolean 等)是不能設(shè)置成 null 的,默認(rèn) false
  • returnInstanceForEmptyRow:當(dāng)返回行的所有列都是空時(shí),MyBatis 默認(rèn)返回null。當(dāng)開啟這個(gè)設(shè)置時(shí),MyBatis 會(huì)返回一個(gè)空實(shí)例。請(qǐng)注意,也適用于嵌套的結(jié)果集(collection、association),默認(rèn) false
  • logPrefix:指定 MyBatis 增加到日志名稱的前綴,默認(rèn)未設(shè)置
  • loglmpl:指定MyBatis 所用日志的具體實(shí)現(xiàn),未指定時(shí)將自動(dòng)查找,可設(shè)置 SLF4J、LOG4J等,默認(rèn)未設(shè)置
  • proxyFactory:指定MyBatis 創(chuàng)建具有延遲加載能力的對(duì)象所用到的代理工具,可選值有 JAVASSIST、CGLIB,默認(rèn) JAVASSIST
  • vfsImpl:指定 VFS 的實(shí)現(xiàn),參數(shù)我 VFS 的實(shí)現(xiàn)類的全限定名,以逗號(hào)分隔,默認(rèn)未設(shè)置

Configuration 除了提供上面的屬性控制 MyBatis 的行為外,還作為容器存放 TypeHandler(類型處理器)、TypeAlias(類型別名)、Mapper 接口及 MapperSQL 配置信息。這些信息在 MyBatis 框架啟動(dòng)時(shí)注冊(cè)到 Configuration 組件中。Configuration 類通過下面的屬性保存 TypeHandler、TypeAlias 等信息:

protected final MapperRegistry mapperRegistry = new MapperRegistry(this);
protected final InterceptorChain interceptorChain = new InterceptorChain();
protected final TypeHandlerRegistry typeHandlerRegistry = new TypeHandlerRegistry();
protected final TypeAliasRegistry typeAliasRegistry= new TypeAliasRegistry();
protected final LanguageDriverRegistry languageRegistry = new LanguageDriverRegistry();
protected final Map<String, MappedStatement> mappedStatements = new StrictMap<MappedStatement>("Mapped Statements collection");
protected final Map<String, Cache> caches = new StrictMap<Cache>("Caches collection");
protected final Map<String, ResultMap> resultMaps = new StrictMap<ResultMap>("Result Maps collection");
protected final Map<String, ParameterMap> parameterMaps = new StrictMap<ParameterMap>("Parameter Maps collection");
protected final Map<String, KeyGenerator> keyGenerators = new StrictMap<KeyGenerator>("Key Generators collection");
protected final Set<String> loadedResources = new HashSet<String>();
protected final Map<String, XNode> sqlFragments = new StrictMap<XNode>("XML fragments parsed from previous mappers");
protected final Collection<XMLStatementBuilder> incompleteStatements = new LinkedList<XMLStatementBuilder>();
protected final Collection<CacheRefResolver> incompletecacheRefs = new LinkedList<CacheRefResolver>()
protected final Collection<ResultMapResolver> incompleteResultMaps = new LinkedList<ResultMapResolver>();
protected final Collection<MethodResolver> incompleteMethods = new LinkedList<MethodResolver>();
protected final Map<String, String> cacheRefMap = new HashMap<String, String>();

這些屬性的含義如下:

  • mapperRegistry:用于注冊(cè) Mapper 接口信息,建立 Mapper 接口的 Class 對(duì)象和 MapperProxyFactory 對(duì)象之間的關(guān)系,其中 MapperProxyFactory 對(duì)象用于創(chuàng)建 Mapper 動(dòng)態(tài)代理對(duì)象
  • interceptorChain:用于注冊(cè) MyBatis 插件信息,MyBatis 插件實(shí)際上就是一個(gè)攔截器
  • typeHandlerRegistry:用于注冊(cè)所有的 TypeHandler,并建立 Jdbc 類型、JDBC 類型與 TypeHandler 之間的對(duì)應(yīng)關(guān)系
  • typeAliasRegistry:用于注冊(cè)所有的類型別名
  • languageRegistry:用于注冊(cè) LanguageDriver,LanguageDriver 用于解析 SQL 配置,將配置信息轉(zhuǎn)換為 SqlSource 對(duì)象
  • mappedStatements:MappedStatement 對(duì)象描述 <insert|selectlupdateldelete> 等標(biāo)簽或者通過 @Select|@Delete|@Update|@Insert 等注解配置的 SQL 信息。MyBatis 將所有的 MappedStatement 對(duì)象注冊(cè)到該屬性中,其中 Key 為 Mapper 的 Id, Value 為 MappedStatement 對(duì)象
  • caches:用于注冊(cè) Mapper 中配置的所有緩存信息,其中 Key 為 Cache 的 id,也就是 Mapper 的命名空間,Value 為 Cache 對(duì)象
  • resultMaps:用于注冊(cè) Mapper 配置文件中通過 標(biāo)簽配置的 ResultMap 信息,ResultMap 用于建立 Java 實(shí)體屬性與數(shù)據(jù)庫(kù)字段之間的映射關(guān)系,其中 Key 為 ResultMap 的 id,該 id 是由 Mapper 命名空間和 標(biāo)簽的 id 屬性組成的,Value 為解析 標(biāo)簽后得到的 ResultMap 對(duì)象
  • parameterMaps:用于注冊(cè) Mapper 中通過 標(biāo)簽注冊(cè)的參數(shù)映射信息。Key 為 ParameterMap 的 id,由 Mapper 命名空間和 標(biāo)簽的 id 屬性構(gòu)成,Value 為解析 標(biāo)簽后得到的 ParameterMap 對(duì)象
  • keyGenerators:用于注冊(cè) KeyGenerator,KeyGenerator 是 MyBatis 的主鍵生成器,MyBatis 提供了三種KeyGenerator,即 Jdbc3KeyGenerator(數(shù)據(jù)庫(kù)自增主鍵)、NoKeyGenerator(無自增主鍵)、SelectKeyGenerator(通過 select 語(yǔ)句查詢自增主鍵,例如 oracle 的 sequence)
  • loadedResources:用于注冊(cè)所有 Mapper XML 配置文件路徑
  • sqlFragments:用于注冊(cè) Mapper 中通過 標(biāo)簽配置的 SQL 片段,Key 為 SQL 片段的 id,Value 為 MyBatis 封裝的表示 XML 節(jié)點(diǎn)的 XNode 對(duì)象
  • incompleteStatements:用于注冊(cè)解析出現(xiàn)異常的 XMLStatementBuilder 對(duì)象
  • incompleteCacheRefs:用于注冊(cè)解析出現(xiàn)異常的 CacheRefResolver 對(duì)象
  • incompleteResultMaps:用于注冊(cè)解析出現(xiàn)異常的 ResultMapResolver 對(duì)象
  • incompleteMethods:用于注冊(cè)解析出現(xiàn)異常的 MethodResolver 對(duì)象

MyBatis 框架啟動(dòng)時(shí),會(huì)對(duì)所有的配置信息進(jìn)行解析,然后將解析后的內(nèi)容注冊(cè)到 Configuration 對(duì)象的這些屬性中。除此之外,Configuration 組件還作為 Executor、StatementHandler、ResultSetHandler、ParameterHandler 組件的工廠類,用于創(chuàng)建這些組件的實(shí)例。

到此這篇關(guān)于MyBatis 核心組件Configuration的文章就介紹到這了,更多相關(guān)MyBatis組件Configuration內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • elasticsearch head的安裝及使用過程解析

    elasticsearch head的安裝及使用過程解析

    這篇文章主要介紹了elasticsearch head的安裝及使用過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • SpringMVC處理multipart請(qǐng)求的示例代碼

    SpringMVC處理multipart請(qǐng)求的示例代碼

    本篇文章主要介紹了SpringMVC處理multipart請(qǐng)求的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • Spring Boot 端口被占用的解決方法

    Spring Boot 端口被占用的解決方法

    這篇文章主要介紹了解決 Spring Boot 端口被占用的方法詳解,通過本文的介紹,你學(xué)習(xí)了如何解決 Spring Boot 端口被占用的問題。你了解了檢查端口是否被占用、停止占用端口的進(jìn)程、更改應(yīng)用程序的端口號(hào)以及檢查應(yīng)用程序間的端口沖突等方法,需要的朋友可以參考下
    2023-07-07
  • Spring?Boot實(shí)現(xiàn)分布式任務(wù)調(diào)度的步驟

    Spring?Boot實(shí)現(xiàn)分布式任務(wù)調(diào)度的步驟

    Spring?Boot提供了一些工具和框架,可以幫助我們輕松地實(shí)現(xiàn)分布式任務(wù)調(diào)度,在本文中我們將介紹如何使用Spring?Boot、Spring?Cloud、Quartz和Redis來實(shí)現(xiàn)分布式任務(wù)調(diào)度,感興趣的朋友跟隨小編一起看看吧
    2023-06-06
  • Java編程WeakHashMap實(shí)例解析

    Java編程WeakHashMap實(shí)例解析

    這篇文章主要介紹了Java編程WeakHashMap實(shí)例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Spring MVC配置雙數(shù)據(jù)源實(shí)現(xiàn)一個(gè)java項(xiàng)目同時(shí)連接兩個(gè)數(shù)據(jù)庫(kù)的方法

    Spring MVC配置雙數(shù)據(jù)源實(shí)現(xiàn)一個(gè)java項(xiàng)目同時(shí)連接兩個(gè)數(shù)據(jù)庫(kù)的方法

    這篇文章主要給大家介紹了關(guān)于Spring MVC如何配置雙數(shù)據(jù)源實(shí)現(xiàn)一個(gè)java項(xiàng)目同時(shí)連接兩個(gè)數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • ArrayList集合初始化及擴(kuò)容方式

    ArrayList集合初始化及擴(kuò)容方式

    這篇文章主要介紹了關(guān)于ArrayList集合初始化及擴(kuò)容方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 使用Java實(shí)現(xiàn)在Excel中創(chuàng)建下拉列表

    使用Java實(shí)現(xiàn)在Excel中創(chuàng)建下拉列表

    下拉列表(下拉框)可以確保用戶僅從預(yù)先給定的選項(xiàng)中進(jìn)行選擇,這樣不僅能減少數(shù)據(jù)輸入錯(cuò)誤,還能節(jié)省時(shí)間提高效率,下面我們就來看看如何在java中利用免費(fèi)庫(kù)實(shí)現(xiàn)創(chuàng)建下拉列表吧
    2024-03-03
  • PowerShell用戶認(rèn)證Function實(shí)例代碼

    PowerShell用戶認(rèn)證Function實(shí)例代碼

    這篇文章主要介紹了PowerShell用戶認(rèn)證Function的資料,并附實(shí)例代碼,幫助大家學(xué)習(xí)理解,有需要的小伙伴可以參考下
    2016-09-09
  • SpringBoot集成?JWT實(shí)現(xiàn)用戶登錄認(rèn)證的項(xiàng)目實(shí)踐

    SpringBoot集成?JWT實(shí)現(xiàn)用戶登錄認(rèn)證的項(xiàng)目實(shí)踐

    當(dāng)今前后端分離時(shí)代,基于Token的會(huì)話保持機(jī)制比傳統(tǒng)的Session/Cookie機(jī)制更加方便,本文主要介紹了SpringBoot集成?JWT實(shí)現(xiàn)用戶登錄認(rèn)證的項(xiàng)目實(shí)踐,感興趣的可以了解一下
    2023-08-08

最新評(píng)論