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

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

 更新時(shí)間:2023年08月02日 08:45:51   作者:低吟不作語  
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ù)庫交互時(shí)的會(huì)話對(duì)象,用于完成數(shù)據(jù)庫的增刪改查功能。SqlSession 是 Executor 組件的外觀,目的是對(duì)外提供易于理解和使用的數(shù)據(jù)庫操作接口
  • Executor:MyBatis 的 SQL 執(zhí)行器,MyBatis 對(duì)數(shù)據(jù)庫所有的增刪改查操作都是由 Executor 組件完成的
  • StatementHandler:封裝了對(duì) JDBC Statement 對(duì)象的操作,比如為 Statement 對(duì)象設(shè)置參數(shù),調(diào)用 Statement 接口提供的方法與數(shù)據(jù)庫交互等等
  • ParameterHandler:當(dāng) MyBatis 框架使用的 Statement 類型為 CallableStatcment 和 PreparedStatement 時(shí),ParamelerHandler 用于為 Statement 對(duì)象參數(shù)占位符設(shè)置值
  • ResultSetHandler:ResultSetHandler 封裝了對(duì) JDBC 的 ResultSet 對(duì)象操作,當(dāng)執(zhí)行 SQL 類型為 SELECT 語句時(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ù)庫操作接口,這是設(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ù)庫完成交互后,當(dāng) SQL 語句類型為 SELECT 時(shí),MyBatis 通過 ResultSetHandler 組件從 Statement 對(duì)象中獲取 ResultSet 對(duì)象,然后將 ResultSet 對(duì)象轉(zhuǎn)換為 Java 對(duì)象

Configuration

MyBatis 框架的配置信息有兩種,一種是配置 MyBatis 框架屬性的主配置文件;另一種是配置執(zhí)行 SQL 語句的 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:是否允許單一語句返回多結(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í)行所有更新語句,默認(rèn) SIMPLE
  • defaultStatementTimeout:設(shè)置超時(shí)時(shí)間,它決定驅(qū)動(dòng)等待數(shù)據(jù)庫響應(yīng)的秒數(shù),可以說任意正整數(shù),默認(rèn)為 null 未設(shè)置
  • defaultFetchSize:默認(rèn)的 FetchSize,用于設(shè)置 Statement 對(duì)象的 fetchSize 屬性,用于限制從數(shù)據(jù)庫中獲取數(shù)據(jù)的最大行數(shù),默認(rèn)為 null 未設(shè)置
  • SafeRowBoundsEnabled:允許在嵌套語句中使用分頁(RowBounds),如果允許使用,則設(shè)置為 false,默認(rèn) false
  • safeResultHandlerEnabled:允許在嵌套語句中使用分頁(ResultHandler),如果允許使用,則設(shè)置為 false,默認(rèn) false
  • mapUnderscoreToCamelCase:是否開啟自動(dòng)駝峰命名規(guī)則映射,即從經(jīng)典數(shù)據(jù)庫列名 A_COLUMN 到經(jīng)典 Java 屬性名 aColumn 的映射
  • localCacheScope:MyBatis 利用本地緩存機(jī)制防止循環(huán)引用和加速重復(fù)查詢。默認(rèn)值為 SESSION,這種情況下會(huì)緩存?zhèn)€會(huì)話中執(zhí)行的所有查詢。若設(shè)置值為 STATEMENT,本地會(huì)話僅用在語句執(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)語言,參數(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ù)庫字段之間的映射關(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ù)庫自增主鍵)、NoKeyGenerator(無自增主鍵)、SelectKeyGenerator(通過 select 語句查詢自增主鍵,例如 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)文章

  • jackson在springboot中的使用方式-自定義參數(shù)轉(zhuǎn)換器

    jackson在springboot中的使用方式-自定義參數(shù)轉(zhuǎn)換器

    這篇文章主要介紹了jackson在springboot中的使用方式-自定義參數(shù)轉(zhuǎn)換器,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java線程協(xié)作的兩種方式小結(jié)

    Java線程協(xié)作的兩種方式小結(jié)

    Java中線程協(xié)作的最常見的兩種方式是利用Object.wait()、Object.notify()和使用Condition,本文主要介紹了Java線程協(xié)作的兩種方式小結(jié),文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • RocketMQ 延時(shí)級(jí)別配置方式

    RocketMQ 延時(shí)級(jí)別配置方式

    這篇文章主要介紹了RocketMQ 延時(shí)級(jí)別配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Springboot熱加載JAR包的實(shí)現(xiàn)方法

    Springboot熱加載JAR包的實(shí)現(xiàn)方法

    SpringBoot作為一個(gè)開發(fā)快速、部署方便的微服務(wù)框架,具有自動(dòng)配置、約定優(yōu)于配置的特點(diǎn),能夠極大地提高開發(fā)效率,它提供了豐富的擴(kuò)展點(diǎn),非常適合實(shí)現(xiàn)動(dòng)態(tài)加載Jar包的功能,本文將深入探討如何在SpringBoot應(yīng)用中實(shí)現(xiàn)動(dòng)態(tài)加載Jar包的方案,感興趣的朋友一起看看吧
    2024-04-04
  • 深入理解Java中的構(gòu)造函數(shù)引用和方法引用

    深入理解Java中的構(gòu)造函數(shù)引用和方法引用

    java構(gòu)造函數(shù),也叫構(gòu)造方法,是java中一種特殊的函數(shù)。函數(shù)名與相同,無返回值。方法引用是用來直接訪問類或者實(shí)例的已經(jīng)存在的方法或者構(gòu)造方法。下面我們來詳細(xì)了解一下它們吧
    2019-06-06
  • SpringBoot項(xiàng)目中使用緩存Cache的正確方法分享

    SpringBoot項(xiàng)目中使用緩存Cache的正確方法分享

    緩存可以通過將經(jīng)常訪問的數(shù)據(jù)存儲(chǔ)在內(nèi)存中,減少底層數(shù)據(jù)源如數(shù)據(jù)庫的壓力,從而有效提高系統(tǒng)的性能和穩(wěn)定性。本文就來講講SpringBoot項(xiàng)目中使用緩存Cache的正確姿勢(shì)吧
    2023-04-04
  • java中判斷字符串?dāng)?shù)組是否包含特定字符串的三種方法實(shí)現(xiàn)與對(duì)比

    java中判斷字符串?dāng)?shù)組是否包含特定字符串的三種方法實(shí)現(xiàn)與對(duì)比

    這篇文章主要為大家詳細(xì)介紹了java中判斷字符串?dāng)?shù)組是否包含特定字符串的三種方法實(shí)現(xiàn)與對(duì)比,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下
    2025-12-12
  • JFormDesigner(IDEA)下載方法

    JFormDesigner(IDEA)下載方法

    JFormDesigner是一種Java Swing GUI設(shè)計(jì)工具,可快速創(chuàng)建用戶界面,支持多種布局管理器,如GridBagLayout、SpringLayout等,本文給大家介紹JFormDesigner(IDEA)下載方法,感興趣的朋友跟隨小編一起看看吧
    2023-12-12
  • JPA實(shí)現(xiàn)多表連接查詢過程

    JPA實(shí)現(xiàn)多表連接查詢過程

    這篇文章主要介紹了JPA實(shí)現(xiàn)多表連接查詢過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2026-06-06
  • springboot+websocket實(shí)現(xiàn)并發(fā)搶紅包功能

    springboot+websocket實(shí)現(xiàn)并發(fā)搶紅包功能

    本文主要介紹了springboot+websocket實(shí)現(xiàn)并發(fā)搶紅包功能,主要包含了4種步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評(píng)論

泾阳县| 瑞安市| 金塔县| 江华| 红桥区| 大关县| 和平区| 英吉沙县| 新邵县| 政和县| 洪洞县| 青田县| 宁安市| 屯门区| 千阳县| 大姚县| 盱眙县| 内江市| 荆州市| 吉木萨尔县| 龙川县| 汽车| 依安县| 钦州市| 宁明县| 闽清县| 襄垣县| 清镇市| 昭通市| 苏尼特右旗| 盐边县| 兴仁县| 高淳县| 息烽县| 东乌珠穆沁旗| 龙南县| 绥芬河市| 定襄县| 慈利县| 民丰县| 兴安县|