Java EE企業(yè)級(jí)應(yīng)用開發(fā)教程課件 第8章 MyBatis快速入門_第1頁(yè)
Java EE企業(yè)級(jí)應(yīng)用開發(fā)教程課件 第8章 MyBatis快速入門_第2頁(yè)
Java EE企業(yè)級(jí)應(yīng)用開發(fā)教程課件 第8章 MyBatis快速入門_第3頁(yè)
Java EE企業(yè)級(jí)應(yīng)用開發(fā)教程課件 第8章 MyBatis快速入門_第4頁(yè)
Java EE企業(yè)級(jí)應(yīng)用開發(fā)教程課件 第8章 MyBatis快速入門_第5頁(yè)
已閱讀5頁(yè),還剩104頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第8章MyBatis快速入門《JavaEE企業(yè)級(jí)應(yīng)用開發(fā)教程(Spring+SpringMVC+MyBatis)》學(xué)習(xí)目標(biāo)/Target熟悉MyBatis的工作流程,能夠簡(jiǎn)述MyBatis操作數(shù)據(jù)庫(kù)時(shí)的工作流程掌握MyBatis入門案例的實(shí)現(xiàn),能夠使用MyBatis從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù),并將獲取到的數(shù)據(jù)封裝到自定義的Java對(duì)象中了解MyBatis的概念,能夠簡(jiǎn)述MyBatis實(shí)現(xiàn)數(shù)據(jù)持久化操作的核心思想熟悉MyBatis核心組件,能夠簡(jiǎn)述SqlSessionFactoryBuilder類、SqlSessionFactory接口和SqlSession接口的作用,以及常用的方法學(xué)習(xí)目標(biāo)/Target掌握定義結(jié)果集映射規(guī)則的標(biāo)簽,能夠在MyBatis映射文件中使用<resultMap>標(biāo)簽定義結(jié)果集映射規(guī)則掌握定義增刪查改語(yǔ)句的標(biāo)簽,能夠在MyBatis映射文件中使用<select>標(biāo)簽、<insert>標(biāo)簽、<update>標(biāo)簽、<delete>標(biāo)簽定義增刪改查語(yǔ)句掌握MyBatis核心配置文件的編寫,能夠在MyBatis核心配置文件中定義各種配置項(xiàng)掌握定義和引用SQL片段的標(biāo)簽,能夠在MyBatis映射文件中使用<sql>和<include>標(biāo)簽定義和引用SQL片段章節(jié)概述/SummaryMyBatis是一個(gè)開源、輕量級(jí)的持久層框架,它通過(guò)封裝JDBC,簡(jiǎn)化了與數(shù)據(jù)庫(kù)交互的繁瑣過(guò)程,開發(fā)者可以專注于SQL語(yǔ)句的編寫和優(yōu)化,而無(wú)需過(guò)多關(guān)注底層的數(shù)據(jù)庫(kù)連接管理等細(xì)節(jié)。這種簡(jiǎn)化和靈活性使得MyBatis在許多Java項(xiàng)目中得到廣泛應(yīng)用,本章將對(duì)MyBatis快速入門進(jìn)行講解。目錄/Contents8.18.2MyBatis概述MyBatis入門程序8.3MyBatis工作流程目錄/Contents8.48.5MyBatis核心組件MyBatis核心配置文件8.6MyBatis映射文件MyBatis概述8.18.1

MyBatis概述先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!了解MyBatis的概念,能夠簡(jiǎn)述MyBatis實(shí)現(xiàn)數(shù)據(jù)持久化操作的核心思想8.1

MyBatis概述JDBC(JavaDatabaseConnectivity,Java數(shù)據(jù)庫(kù)連接)是Java應(yīng)用程序訪問(wèn)和操作數(shù)據(jù)庫(kù)的基礎(chǔ),它提供了一套用于與數(shù)據(jù)庫(kù)交互的API,允許Java應(yīng)用程序執(zhí)行連接數(shù)據(jù)庫(kù)、發(fā)送SQL語(yǔ)句、處理結(jié)果等操作。盡管JDBC提供了與數(shù)據(jù)庫(kù)交互的基本功能,但使用JDBC編程比較煩瑣,同時(shí)還存在如下不足。①資源管理復(fù)雜②代碼冗余③

SQL語(yǔ)句與Java代碼緊密耦合8.1

MyBatis概述針對(duì)JDBC的這些不足,持久層框架應(yīng)運(yùn)而生。持久層框架是指用于處理數(shù)據(jù)持久化的軟件框架,通常用于將應(yīng)用程序中的數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中,并支持對(duì)這些數(shù)據(jù)進(jìn)行檢索、更新和刪除操作。持久層框架的主要目標(biāo)是簡(jiǎn)化數(shù)據(jù)持久化的實(shí)現(xiàn)過(guò)程,提高開發(fā)效率,并且使得數(shù)據(jù)持久化的代碼更加易于維護(hù)和擴(kuò)展。其中,MyBatis是當(dāng)前主流的持久層框架之一。MyBatis基于ORM(Object-RelationalMapping,對(duì)象關(guān)系映射)技術(shù)實(shí)現(xiàn)數(shù)據(jù)的持久化操作,ORM技術(shù)是一種在面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言與關(guān)系型數(shù)據(jù)庫(kù)之間建立映射關(guān)系的編程技術(shù),它的核心思想是將程序中的對(duì)象自動(dòng)持久化到關(guān)系型數(shù)據(jù)庫(kù)中,以及將數(shù)據(jù)庫(kù)中的數(shù)據(jù)映射回程序的對(duì)象中。在MyBatis中,這種映射關(guān)系可以通過(guò)XML配置文件或注解進(jìn)行定義。開發(fā)者只需定義好映射關(guān)系,MyBatis就會(huì)自動(dòng)生成并執(zhí)行相應(yīng)的SQL語(yǔ)句。MyBatis入門程序8.28.2MyBatis入門程序先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!掌握MyBatis入門程序的實(shí)現(xiàn),能夠使用MyBatis從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù),并將獲取到的數(shù)據(jù)封裝到自定義的Java對(duì)象中8.2MyBatis入門程序1.創(chuàng)建數(shù)據(jù)庫(kù)和數(shù)據(jù)表在MySQL中創(chuàng)建一個(gè)名稱為mybatis的數(shù)據(jù)庫(kù),在該數(shù)據(jù)庫(kù)中創(chuàng)建數(shù)據(jù)表user,并插入2條記錄作為后續(xù)的測(cè)試數(shù)據(jù),具體SQL語(yǔ)句如下所示。CREATEDATABASEIFNOTEXISTSmybatis;USEmybatis;DROPTABLEIFEXISTSuser;CREATETABLEuser(idint(0)NOTNULLAUTO_INCREMENT,usernamevarchar(50),PRIMARYKEY(id));insertintouser(id,username)values(1,'張三'),(2,'李四');8.2MyBatis入門程序2.創(chuàng)建工程并引入依賴在IDEA中創(chuàng)建一個(gè)名稱為chapter08的Maven項(xiàng)目,并在項(xiàng)目的pom.xml文件中引入MyBatis、MySQL連接、單元測(cè)試的相關(guān)依賴,具體如文件8-1所示。文件8-1pom.xml源代碼8.2MyBatis入門程序3.自定義實(shí)體類在項(xiàng)目的src/main/java目錄下創(chuàng)建包c(diǎn)om.itheima.entity,并在該包中創(chuàng)建與數(shù)據(jù)表user對(duì)應(yīng)的實(shí)體類User,具體如文件8-2所示。文件8-2User.java源代碼8.2MyBatis入門程序4.創(chuàng)建MyBatis映射文件在src/main/resources目錄下創(chuàng)建文件夾mapper,在該文件夾下創(chuàng)建一個(gè)名稱為UserMapper.xml的文件,在該文件中存放MyBatis操作用戶的映射信息,具體如文件8-3所示。文件8-3UserMapper.xml源代碼8.2MyBatis入門程序5.創(chuàng)建MyBatis核心配置文件在src/main/resources目錄下創(chuàng)建一個(gè)名稱為mybatis-config.xml的文件作為MyBatis的核心配置文件,mybatis-config.xml中的配置信息如文件8-4所示。文件8-4mybatis-config.xml源代碼8.2MyBatis入門程序6.創(chuàng)建測(cè)試類在項(xiàng)目的src/test/java目錄下創(chuàng)建UserTest類,該類中定義測(cè)試方法findByIdTest(),在該方法中使用SqlSession對(duì)象根據(jù)用戶編號(hào)從數(shù)據(jù)庫(kù)中查詢用戶信息,具體如文件8-5所示。文件8-5UserTest.java源代碼8.2MyBatis入門程序7.效果測(cè)試運(yùn)行文件8-5中的findByIdTest()方法,運(yùn)行結(jié)果如下圖所示。MyBatis工作流程8.38.3MyBatis工作流程先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!熟悉MyBatis的工作流程,能夠簡(jiǎn)述MyBatis操作數(shù)據(jù)庫(kù)時(shí)的工作流程8.3MyBatis工作流程MyBatis核心組件8.48.4

MyBatis核心組件通過(guò)MyBatis的入門程序我們可以知道,MyBatis程序的運(yùn)行需要依靠SqlSessionFactoryBuilder類、SqlSessionFactory接口和SqlSession接口,這三個(gè)類和接口是MyBatis框架的核心組件,它們共同構(gòu)成了MyBatis的基礎(chǔ)架構(gòu)。為了讓大家能更好地理解這三者的作用與關(guān)系,下面我們將對(duì)它們做進(jìn)一步的講解。8.4.1SqlSessionFactoryBuilder類先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!熟悉SqlSessionFactoryBuilder類,能夠簡(jiǎn)述SqlSessionFactoryBuilder類的作用和重載的build()方法8.4.1SqlSessionFactoryBuilder類SqlSessionFactoryBuilder類是在MyBatis中非常重要的組件,它的主要職責(zé)是讀取MyBatis的配置信息,解析配置信息中的數(shù)據(jù)庫(kù)連接信息、事務(wù)管理配置以及Mapper映射文件路徑等關(guān)鍵信息。通過(guò)解析這些信息能夠?yàn)闃?gòu)建SqlSessionFactory實(shí)例提供必要的參數(shù)和設(shè)置。為了滿足不同的需求和場(chǎng)景,SqlSessionFactoryBuilder類提供了多個(gè)重載的build()方法用于構(gòu)建SqlSessionFactory實(shí)例,這些重載方法根據(jù)構(gòu)建SqlSessionFactory實(shí)例時(shí)傳入不同的參數(shù)可以分為多種方式。8.4.1SqlSessionFactoryBuilder類1.使用InputStream輸入流構(gòu)建當(dāng)配置信息編寫在核心配置文件中,并且開發(fā)者可以獲取到該文件的輸入流時(shí),可以使用輸入流讀取配置信息后作為build()方法的參數(shù)。示例代碼如下。InputStreaminputStream=Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);8.4.1SqlSessionFactoryBuilder類2.使用Reader輸入流構(gòu)建使用Reader構(gòu)建和使用InputStream輸入流構(gòu)建類似,主要的區(qū)別在于讀取核心配置文件的方式不同。使用Reader輸入流構(gòu)建基于Reader對(duì)象讀取核心配置文件,然后將該Reader對(duì)象作為build()方法發(fā)參數(shù)。示例代碼如下。Readerreader=Resources.getResourceAsReader("mybatis-config.xml");SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(reader);8.4.1SqlSessionFactoryBuilder類3.使用Configuration對(duì)象構(gòu)建當(dāng)程序以編程方式配置MyBatis的配置信息時(shí),開發(fā)者可以構(gòu)建并傳遞一個(gè)Configuration對(duì)象作為build()方法的參數(shù)。示例代碼如下。Configuration對(duì)象作為build()方法的參數(shù)源代碼8.4.2SqlSessionFactory接口先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!熟悉SqlSessionFactory接口,能夠簡(jiǎn)述SqlSessionFactory接口的作用和常用的openSession()方法8.4.2SqlSessionFactory接口SqlSessionFactory接口是MyBatis框架中的核心接口之一,主要負(fù)責(zé)創(chuàng)建SqlSession對(duì)象。MyBatis提供了SqlSessionFactory接口的默認(rèn)實(shí)現(xiàn)類DefaultSqlSessionFactory,通常情況下,SqlSessionFactoryBuilder的build()方法會(huì)基于這個(gè)默認(rèn)實(shí)現(xiàn)類創(chuàng)建SqlSessionFactory實(shí)例。DefaultSqlSessionFactory主要負(fù)責(zé)SqlSession實(shí)例的創(chuàng)建和管理。它采用工廠模式,并根據(jù)MyBatis的配置信息來(lái)創(chuàng)建SqlSession對(duì)象。SqlSessionFactory提供了多個(gè)重載的openSession()方法,這些方法旨在滿足不同的需求場(chǎng)景,靈活創(chuàng)建SqlSession對(duì)象。通過(guò)這些重載方法,開發(fā)者可以精確控制SqlSession的行為,如是否自動(dòng)提交事務(wù)、選擇特定的執(zhí)行器類型以及設(shè)定事務(wù)的隔離級(jí)別等。8.4.2SqlSessionFactory接口SqlSessionFactory接口提供的openSession()方法方法說(shuō)明SqlSession

openSession()使用SqlSessionFactory的默認(rèn)配置創(chuàng)建一個(gè)SqlSession對(duì)象。默認(rèn)情況下,該SqlSession對(duì)象的事務(wù)不會(huì)自動(dòng)提交,需要手動(dòng)進(jìn)行提交或回滾SqlSession

openSession(

Boolean

autoCommit)使用SqlSessionFactory的默認(rèn)配置創(chuàng)建一個(gè)SqlSession對(duì)象,并指定是否自動(dòng)提交事務(wù)。其中autoCommit參數(shù)設(shè)置為true,那么事務(wù)將會(huì)自動(dòng)提交;如果設(shè)置為false,則事務(wù)不會(huì)自動(dòng)提交,需要手動(dòng)調(diào)用commit()或rollback()方法來(lái)提交或回滾事務(wù)SqlSession

openSession(

Connection

connection)使用傳入的Connection對(duì)象創(chuàng)建SqlSession對(duì)象,而不是使用SqlSessionFactory的默認(rèn)配置SqlSession

openSession(

TransactionIsolationLevel

level)根據(jù)指定的事務(wù)隔離級(jí)別level創(chuàng)建SqlSession對(duì)象8.4.2SqlSessionFactory接口方法說(shuō)明SqlSessionopenSession(

ExecutorType

execType)根據(jù)指定執(zhí)行器類型execType創(chuàng)建SqlSession,執(zhí)行器類型決定了MyBatis在執(zhí)行SQL語(yǔ)句時(shí)的行為,包括是否復(fù)用預(yù)處理語(yǔ)句和是否批處理等。ExecutorType是一個(gè)枚舉類型,有三個(gè)可選值:SIMPLE:默認(rèn)的執(zhí)行器,為每一個(gè)語(yǔ)句的執(zhí)行創(chuàng)建一個(gè)新的預(yù)處理語(yǔ)句。REUSE:執(zhí)行器會(huì)復(fù)用預(yù)處理語(yǔ)句。BATCH:執(zhí)行器會(huì)重復(fù)使用語(yǔ)句和批量更新,主要用于批量操作,以減少預(yù)處理語(yǔ)句的創(chuàng)建和銷毀的開銷SqlSessionopenSession(ExecutorTypeexecType,Boolean

autoCommit)根據(jù)指定執(zhí)行器類型execType和是否自動(dòng)提交事務(wù)創(chuàng)建SqlSessionSqlSessionopenSession(ExecutorType

execType,Connection

connection)根據(jù)指定執(zhí)行器類型execType和Connection對(duì)象創(chuàng)建SqlSession對(duì)象8.4.3SqlSession接口先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!熟悉SqlSession接口,能夠簡(jiǎn)述SqlSession接口的作用和SqlSession接口的常用方法8.4.3SqlSession接口SqlSession接口是MyBatis中用于執(zhí)行SQL命令并與數(shù)據(jù)庫(kù)進(jìn)行交互的主要接口之一,其實(shí)例用于表示應(yīng)用程序與數(shù)據(jù)庫(kù)的一次會(huì)話,它提供了一系列方法來(lái)執(zhí)行SQL查詢、更新、插入和刪除操作,以及管理事務(wù)和資源的方法。DefaultSqlSession是MyBatis提供的SqlSession接口默認(rèn)實(shí)現(xiàn)類,當(dāng)SqlSessionFactory實(shí)例調(diào)用openSession()方法時(shí),MyBatis會(huì)根據(jù)配置和上下文信息來(lái)創(chuàng)建并返回DefaultSqlSession的一個(gè)實(shí)例,開發(fā)者可以使用這個(gè)實(shí)例來(lái)執(zhí)行數(shù)據(jù)庫(kù)操作,例如查詢、插入、更新和刪除等。通常開發(fā)者不需要關(guān)心SqlSession的具體實(shí)現(xiàn)細(xì)節(jié)。只需要通過(guò)SqlSession實(shí)例調(diào)用對(duì)應(yīng)的方法執(zhí)行SQL語(yǔ)句、獲取映射器等。MyBatis會(huì)負(fù)責(zé)處理底層的數(shù)據(jù)庫(kù)連接、SQL執(zhí)行、結(jié)果集映射等細(xì)節(jié)。8.4.3SqlSession接口SqlSession接口的常用方法方法名稱描述<T>TselectOne(

Stringstatement)根據(jù)參數(shù)statement執(zhí)行查詢操作,返回單個(gè)結(jié)果,statement是配置信息中SQL語(yǔ)句的唯一標(biāo)識(shí)符,通常由映射器(Mapper)的命名空間和該SQL語(yǔ)句在映射器中的id屬性組成<T>TselectOne(Stringstatement,Objectparameter)根據(jù)參數(shù)statement和parameter執(zhí)行查詢操作,返回單個(gè)結(jié)果。其中,statement是SQL語(yǔ)句的唯一標(biāo)識(shí)符,parameter是傳遞給SQL語(yǔ)句的參數(shù)<E>List<E>selectList(

Stringstatement)根據(jù)參數(shù)statement執(zhí)行查詢操作,返回結(jié)果封裝在集合中,statement是配置信息中SQL語(yǔ)句的唯一標(biāo)識(shí)符8.4.3SqlSession接口方法名稱描述<E>List<E>selectList(Stringstatement,Objectparameter)根據(jù)參數(shù)statement和parameter執(zhí)行查詢操作,返回結(jié)果封裝在集合中,其中,statement是SQL語(yǔ)句的唯一標(biāo)識(shí)符,parameter是傳遞給SQL語(yǔ)句的參數(shù)intinsert(Stringstatement)根據(jù)參數(shù)statemen執(zhí)行插入操作,statement是配置信息中SQL語(yǔ)句的唯一標(biāo)識(shí)符intinsert(Stringstatement,Objectparameter)根據(jù)參數(shù)statement和parameter執(zhí)行插入操作,其中,statement是SQL語(yǔ)句的唯一標(biāo)識(shí)符,parameter是傳遞給SQL語(yǔ)句的參數(shù)intupdate(Stringstatement)根據(jù)參數(shù)statemen執(zhí)行更新操作,statement是配置信息中SQL語(yǔ)句的唯一標(biāo)識(shí)符8.4.3SqlSession接口方法名稱描述intupdate(Stringstatement,Objectparameter)根據(jù)參數(shù)statement和parameter執(zhí)行更新操作,其中,statement是SQL語(yǔ)句的唯一標(biāo)識(shí)符,parameter是傳遞給SQL語(yǔ)句的參數(shù)intdelete(Stringstatement)根據(jù)參數(shù)statemen執(zhí)行刪除操作,statement是配置信息中SQL語(yǔ)句的唯一標(biāo)識(shí)符intdelete(Stringstatement,Objectparameter)根據(jù)參數(shù)statement和parameter執(zhí)行刪除操作,其中,statement是SQL語(yǔ)句的唯一標(biāo)識(shí)符,parameter是傳遞給SQL語(yǔ)句的參數(shù)voidcommit()提交當(dāng)前事務(wù)8.4.3SqlSession接口方法名稱描述voidrollback()回滾當(dāng)前事務(wù)voidclose()關(guān)閉SqlSession對(duì)象,釋放數(shù)據(jù)庫(kù)連接和其他資源<T>TgetMapper(Class<T>type)獲取指定類型的映射器(Mapper)實(shí)例ConnectiongetConnection()獲取當(dāng)前SqlSession使用的數(shù)據(jù)庫(kù)連接MyBatis核心配置文件8.58.5MyBatis核心配置文件先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!掌握MyBatis核心配置文件的編寫,能夠在MyBatis核心配置文件中定義屬性、全局設(shè)置、類型別名、插件、環(huán)境配置和映射器的信息8.5MyBatis核心配置文件MyBatis的配置信息可以以多種方式定義,其中最常見的是使用XML格式的配置文件,這種方式能夠清晰地組織配置信息,并且易于閱讀和維護(hù),MyBatis核心配置文件的主要標(biāo)簽如下所示。8.5MyBatis核心配置文件<configuration>標(biāo)簽是MyBatis核心配置文件的根標(biāo)簽,MyBatis核心配置文件通過(guò)<configuration>標(biāo)簽將所有的配置信息組織起來(lái),在這個(gè)標(biāo)簽內(nèi)部,可以定義各種配置項(xiàng),包括屬性、全局設(shè)置、類型別名、插件、環(huán)境配置和映射器等。下面對(duì)MyBatis核心配置文件中其他的主要標(biāo)簽進(jìn)行說(shuō)明。8.5MyBatis核心配置文件1.<properties>標(biāo)簽<properties>標(biāo)簽用于定義屬性,在該標(biāo)簽中定義的屬性可以在核心配置文件中的其他地方通過(guò)${屬性名}的方式引用這些屬性,定義屬性的方式有讀取外部屬性文件和直接定義屬性鍵值對(duì)兩種方式。8.5MyBatis核心配置文件(1)讀取外部屬性文件例如在config文件夾下有屬性文件perties,文件中的內(nèi)容如下。db.driver=com.mysql.cj.jdbc.Driverdb.url=jdbc:mysql://localhost:3306/mydatabasedb.username=rootdb.password=secret<properties>標(biāo)簽可以通過(guò)resource或url屬性讀取指定位置的外部屬性文件,MyBatis啟動(dòng)時(shí)會(huì)加載該文件,并將其中的屬性作為配置的一部分。示例如下。<propertiesresource="config/perties"/>8.5MyBatis核心配置文件(2)直接在<properties>標(biāo)簽內(nèi)定義在<properties>標(biāo)簽內(nèi)使用<property>子標(biāo)簽可以定義對(duì)應(yīng)的屬性。示例如下。<properties><propertyname="db.driver"value="com.mysql.cj.jdbc.Driver"/><propertyname="db.url"value="jdbc:mysql://localhost:3306/mybatis"/><propertyname="db.username"value="root"/><propertyname="db.password"value="root"/></properties>直接在<properties>標(biāo)簽內(nèi)定義的屬性優(yōu)先級(jí)高于從外部屬性文件中讀取到的屬性。如果兩者都存在相同的屬性名,那么在核心配置文件中直接定義的屬性會(huì)覆蓋外部屬性文件中的屬性。在MyBatis的核心配置文件中引用定義的屬性示例如下。<dataSourcetype="POOLED"><propertyname="driver"value="${db.driver}"/><propertyname="url"value="${db.url}"/><propertyname="username"value="${db.username}"/><propertyname="password"value="${db.password}"/></dataSource>8.5MyBatis核心配置文件2.<settings>標(biāo)簽<settings>標(biāo)簽用于配置MyBatis的運(yùn)行時(shí)行為,通常用于設(shè)置全局性的參數(shù),例如緩存設(shè)置、日志實(shí)現(xiàn)、延遲加載等。<settings>標(biāo)簽內(nèi)可以包含多個(gè)<setting>標(biāo)簽,每個(gè)<setting>標(biāo)簽用于定義了一個(gè)具體的配置項(xiàng),<setting>標(biāo)簽中常見的配置項(xiàng)如下。(1)cacheEnabledcacheEnabled用于設(shè)置是否啟用MyBatis的二級(jí)緩存。當(dāng)設(shè)置為true時(shí),MyBatis會(huì)啟用二級(jí)緩存,這有助于提高查詢性能,尤其是在重復(fù)查詢相同數(shù)據(jù)時(shí)。默認(rèn)為true(2)lazyLoadingEnabledlazyLoadingEnabled用于設(shè)置是否啟用延遲加載。當(dāng)設(shè)置為true時(shí),關(guān)聯(lián)對(duì)象的數(shù)據(jù)加載會(huì)被延遲,直到實(shí)際使用時(shí)才進(jìn)行加載。這有助于減少不必要的數(shù)據(jù)庫(kù)訪問(wèn),提高性能。8.5MyBatis核心配置文件(3)multipleResultSetsEnabledmultipleResultSetsEnabled用于設(shè)置是否允許從單一的語(yǔ)句返回多個(gè)結(jié)果集,其默認(rèn)值為true。當(dāng)設(shè)置為true時(shí),MyBatis支持從單個(gè)SQL語(yǔ)句中返回多個(gè)結(jié)果集。(4)useColumnLabeluseColumnLabel用于設(shè)置是否使用列標(biāo)簽代替列名,其默認(rèn)值為true。(5)useGeneratedKeysuseGeneratedKeys用于設(shè)置是否要在插入操作后返回生成的主鍵,需要注意的是,useGeneratedKeys只針對(duì)insert語(yǔ)句生效。8.5MyBatis核心配置文件(6)autoMappingBehaviorautoMappingBehavior用于設(shè)置MyBatis如何自動(dòng)映射列到字段或?qū)傩?,其可選值有NONE、PARTIAL和FULL,分別表示不自動(dòng)映射、僅自動(dòng)映射沒(méi)有定義嵌套結(jié)果集映射的列,以及自動(dòng)映射所有列。(7)mapUnderscoreToCamelCasemapUnderscoreToCamelCase用于設(shè)置是否將數(shù)據(jù)庫(kù)中的下劃線命名自動(dòng)映射為Java中的駝峰命名。例如,當(dāng)值設(shè)置為true時(shí),數(shù)據(jù)庫(kù)中的user_name列將被映射為Java對(duì)象中的userName屬性。(8)logImpllogImpl用于指定MyBatis使用的日志記錄實(shí)現(xiàn),根據(jù)項(xiàng)目所使用的日志框架選擇合適的值,其常見的值有SLF4J、LOG4J、JDK_LOGGING、STDOUT_LOGGING,前三者依次表示通過(guò)Log4j框架、SLF4J框架、JDK自帶的日志框架作為日志記錄實(shí)現(xiàn)。8.5MyBatis核心配置文件下面通過(guò)示例演示MyBatis核心配置文件中的配置。核心配置文件的配置示例源代碼8.5MyBatis核心配置文件3.<typeAliases>標(biāo)簽<typeAliases>標(biāo)簽用于定義類型的別名,以簡(jiǎn)化XML映射文件中類型的引用。類型別名通常用于代替類的全限定名,以便在映射文件中使用這些別名代替類的全限定名,使得映射文件中的配置更加簡(jiǎn)潔易讀。在MyBatis的核心配置文件中,可以在<typeAliases>標(biāo)簽通過(guò)<typeAlias>標(biāo)簽和<package>標(biāo)簽兩種方式定義類型的別名。(1)使用<typeAlias>標(biāo)簽定義別名通過(guò)<typeAlias>標(biāo)簽,開發(fā)者可以為指定的Java類型定義別名,示例如下。<typeAliases><typeAliasalias="User"type="com.itheima.domain.User"/><typeAliasalias="Order"type="com.itheima.domain.Order"/></typeAliases>8.5MyBatis核心配置文件(2)使用<package>標(biāo)簽定義別名在<typeAliases>標(biāo)簽下使用<package>標(biāo)簽可以指定一個(gè)包,MyBatis會(huì)自動(dòng)掃描這個(gè)包下的所有類,并為它們創(chuàng)建別名。默認(rèn)情況下,會(huì)將這些類名首字母小寫后的名稱作為別名,示例如下。<typeAliases><packagename="com.itheima.domain"/></typeAliases>8.5MyBatis核心配置文件除了可以使用<typeAliases>標(biāo)簽為實(shí)體類定義別名外,MyBatis框架還為常見的Java類型提供了相應(yīng)的默認(rèn)別名,MyBatis默認(rèn)的常見Java類型的別名如下所示。Java類型默認(rèn)別名byte_bytelong_longshort_shortint_intdouble_doublefloat_floatboolean_booleanStringstringBytebyte8.5MyBatis核心配置文件Java類型默認(rèn)別名LonglongShortshortIntegerintegerDoubledoubleFloatfloatBooleanbooleanDatedateObjectobjectMapmapHashMaphashmapListlistArrayListarraylistCollectioncollectionIteratoriterator8.5MyBatis核心配置文件4.<plugins>標(biāo)簽在MyBatis中,<plugins>標(biāo)簽用于定義插件,定義的插件可以理解為攔截器,用于攔截MyBatis的某些方法調(diào)用,并在攔截后執(zhí)行一些自定義的處理邏輯。插件機(jī)制為MyBatis提供了強(qiáng)大的擴(kuò)展性,使得開發(fā)者可以在不修改MyBatis核心代碼的情況下,對(duì)其功能進(jìn)行增強(qiáng)或修改。在<plugins>標(biāo)簽中,可以配置一個(gè)或多個(gè)<plugin>子標(biāo)簽,每個(gè)<plugin>子標(biāo)簽代表一個(gè)插件。每個(gè)插件都需要指定其interceptor屬性,該屬性值為插件類的全限定名。此外,還可以在<plugin>標(biāo)簽內(nèi)部配置<property>子標(biāo)簽,用于為插件提供額外的配置參數(shù)。8.5MyBatis核心配置文件<plugins>標(biāo)簽的使用示例。<plugins> <!--PageHelper分頁(yè)插件--> <plugininterceptor="com.github.pagehelper.PageInterceptor"> <!--設(shè)置分頁(yè)插件的參數(shù)--> <propertyname="helperDialect"value="mysql"/> <propertyname="reasonable"value="true"/> </plugin></plugins>8.5MyBatis核心配置文件5.<environments>標(biāo)簽在MyBatis的核心配置文件中,<environments>標(biāo)簽用于配置數(shù)據(jù)庫(kù)環(huán)境,該標(biāo)簽可以包含多個(gè)<environment>子標(biāo)簽,每個(gè)<environment>子標(biāo)簽代表一個(gè)數(shù)據(jù)庫(kù)環(huán)境配置。通過(guò)配置不同的環(huán)境,MyBatis可以根據(jù)運(yùn)行時(shí)的需求切換到不同的數(shù)據(jù)庫(kù)環(huán)境,其中<environments>標(biāo)簽使用default屬性指定默認(rèn)使用的環(huán)境。當(dāng)MyBatis啟動(dòng)時(shí),它會(huì)查找default屬性指定的環(huán)境配置作為默認(rèn)配置。每個(gè)<environment>標(biāo)簽通過(guò)id屬性指定當(dāng)前環(huán)境配置的唯一標(biāo)識(shí),而default屬性用于指定默認(rèn)的環(huán)境配置。8.5MyBatis核心配置文件(1)<transactionManager>標(biāo)簽<transactionManager>標(biāo)簽用于配置事務(wù)管理器,MyBatis支持兩種類型的事務(wù)管理器:JDBC(由JDBC連接來(lái)管理事務(wù))和MANAGED(由容器來(lái)管理事務(wù))。(2)<dataSource>標(biāo)簽<dataSource>標(biāo)簽用于配置數(shù)據(jù)源。數(shù)據(jù)源是MyBatis用于連接數(shù)據(jù)庫(kù)的對(duì)象。MyBatis支持多種數(shù)據(jù)源類型,如POOLED(使用連接池的數(shù)據(jù)源)、UNPOOLED(不使用連接池的數(shù)據(jù)源)和JNDI(從Java命名和目錄接口查找的數(shù)據(jù)源)。<environments>標(biāo)簽的使用示例源代碼8.5MyBatis核心配置文件6.<mappers>標(biāo)簽<mappers>標(biāo)簽確實(shí)用于配置需要加載的映射器(Mapper)信息,其中加載的映射器信息可以是映射文件,也可以是映射器接口。<mappers>標(biāo)簽中可以通過(guò)<mapper>子標(biāo)簽和<package>子標(biāo)簽實(shí)現(xiàn)映射器信息的指定。8.5MyBatis核心配置文件這種方式直接指定了映射文件的路徑。MyBatis會(huì)根據(jù)這個(gè)路徑加載XML映射文件通過(guò)資源路徑指定映射文件這種方式需要指定映射器接口的全限定名,MyBatis會(huì)自動(dòng)在映射器接口相同的包路徑下,查找與這個(gè)接口同名的XML映射文件,并加載其中的映射信息通過(guò)映射器接口指定映射器<mapper>子標(biāo)簽配置映射器信息(1)<mapper>子標(biāo)簽<mapper>子標(biāo)簽用于指定單個(gè)映射器的位置。8.5MyBatis核心配置文件(2)<package>子標(biāo)簽<package>子標(biāo)簽用于指定包含映射器接口的包名。當(dāng)使用<package>子標(biāo)簽時(shí),MyBatis會(huì)自動(dòng)掃描指定包下的所有映射器接口,示例如下。<mappers><packagename="com.itheima.mapper"/></mappers>MyBatis映射文件8.68.6

MyBatis映射文件MyBatis的映射文件是指用于定義實(shí)體類和數(shù)據(jù)庫(kù)操作之間映射信息的XML文件,此類文件以<mapper>標(biāo)簽作為其根元素,用以標(biāo)識(shí)一個(gè)獨(dú)立的XML映射單元。其中,<mapper>標(biāo)簽的namespace屬性為映射文件賦予了唯一的名稱空間,使得MyBatis能夠依據(jù)名稱空間精準(zhǔn)地區(qū)分并管理不同的映射文件。映射文件中通常包含SQL語(yǔ)句、輸入?yún)?shù)和結(jié)果集映射等映射信息,這些映射信息通過(guò)MyBatis提供的特定標(biāo)簽在<mapper>標(biāo)簽內(nèi)進(jìn)行定義,這些標(biāo)簽根據(jù)其作用可以分為定義增刪查改語(yǔ)句的標(biāo)簽、定義結(jié)果集映射的標(biāo)簽、定義和引用SQL片段的標(biāo)簽。下對(duì)MyBatis映射文件中的常見標(biāo)簽進(jìn)行講解。8.6.1定義SQL語(yǔ)句的標(biāo)簽先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!掌握定義增刪查改語(yǔ)句的標(biāo)簽,能夠在MyBatis映射文件中使用<select>標(biāo)簽、<insert>標(biāo)簽、<update>標(biāo)簽、<delete>標(biāo)簽定義增刪改查語(yǔ)句8.6.1定義SQL語(yǔ)句的標(biāo)簽在使用MyBatis進(jìn)行持久層開發(fā)時(shí),核心任務(wù)之一便是定義與數(shù)據(jù)庫(kù)交互的SQL語(yǔ)句,以便實(shí)現(xiàn)數(shù)據(jù)的增刪查改操作。這些操作的SQL指令并非直接硬編碼在應(yīng)用程序中,而是封裝在易于管理和維護(hù)的XML映射文件中。通過(guò)這種方式,開發(fā)者可以將復(fù)雜的SQL語(yǔ)句與業(yè)務(wù)邏輯分離,提升代碼的整潔度與可讀性。下面對(duì)MyBatis映射文件中用于定義SQL語(yǔ)句的標(biāo)簽進(jìn)行講解。8.6.1定義SQL語(yǔ)句的標(biāo)簽resultMap屬性用于指定一個(gè)結(jié)果集映射,可以使用這個(gè)屬性來(lái)引用一個(gè)定義好的<resultMap>id屬性用于定義當(dāng)前查詢的唯一標(biāo)識(shí),是必需的屬性parameterType屬性用于指定傳入SQL語(yǔ)句的參數(shù)類型resultType屬性用于指定查詢結(jié)果的映射類型,該屬性的值可以是Java類的全限定名和ava類對(duì)應(yīng)的別名在MyBatis中,<select>標(biāo)簽用于配置SQL查詢語(yǔ)句以及查詢結(jié)果的映射規(guī)則。使用<select>標(biāo)簽開發(fā)者可以指定一個(gè)SQL查詢,并指定如何將查詢結(jié)果集映射到Java對(duì)象。<select>標(biāo)簽的常用屬性1.<select>標(biāo)簽8.6.1定義SQL語(yǔ)句的標(biāo)簽(1)創(chuàng)建Mapper接口文件8-6UserMapper.java源代碼在項(xiàng)目的src/main/java目錄下創(chuàng)建包c(diǎn)om.itheima.mapper,并在該包中定義操作User對(duì)象和數(shù)據(jù)庫(kù)數(shù)據(jù)映射的Mapper接口UserMapper,并在該接口中定義方法findById(),具體如文件8-6所示。下面通過(guò)一個(gè)查詢用戶信息的案例,演示<select>標(biāo)簽的使用。8.6.1定義SQL語(yǔ)句的標(biāo)簽(2)編寫映射信息在MyBatis的映射文件中,為了動(dòng)態(tài)地插入SQL語(yǔ)句中的參數(shù)值,可以使用#{}和${}兩種占位符,其中#{}符號(hào)表示預(yù)編譯參數(shù)占位符,MyBatis會(huì)將#{}替換為問(wèn)號(hào)(?),并在執(zhí)行SQL時(shí)使用PreparedStatement的setter()方法為每個(gè)問(wèn)號(hào)綁定相應(yīng)的參數(shù)值。${}符號(hào)用于字符串替換,MyBatis會(huì)直接將${}內(nèi)的變量值作為原始字符串插入到SQL語(yǔ)句中。這意味著${}的內(nèi)容不會(huì)被當(dāng)作參數(shù)對(duì)待,而是直接參與SQL語(yǔ)句的構(gòu)建,類似于普通的字符串拼接。8.6.1定義SQL語(yǔ)句的標(biāo)簽(2)編寫映射信息文件8-7UserMapper.xml源代碼在src/main/resources目錄下創(chuàng)建多層級(jí)文件夾com/itheima/mapper,在該文件夾下創(chuàng)建一個(gè)名稱為UserMapper.xml的文件,在該文件定義查詢語(yǔ)句,在查詢語(yǔ)句中獲取傳入的參數(shù)作為SQL語(yǔ)句的查詢條件,具體如文件8-7所示。8.6.1定義SQL語(yǔ)句的標(biāo)簽(3)定義測(cè)試方法文件8-8MapperTest.java源代碼SqlSession接口中提供了getMapper()方法用于根據(jù)傳入Mapper接口的Class對(duì)象來(lái)獲取對(duì)應(yīng)的Mapper實(shí)例。在項(xiàng)目的src/test/java目錄下創(chuàng)建MapperTest類,為了減少冗余代碼,在此將創(chuàng)建SqlSession對(duì)象的代碼抽取成獨(dú)立的方法createSqlSession(),并定義測(cè)試方法selectTest(),在測(cè)試方法中通過(guò)SqlSession對(duì)象獲取UserMapper對(duì)象,并通過(guò)UserMapper對(duì)象調(diào)用其findById()方法查詢用戶信息,具體如文件8-8所示。8.6.1定義SQL語(yǔ)句的標(biāo)簽(4)注冊(cè)Mapper接口在文件8-4的mybatis-config.xml文件的<mappers>標(biāo)簽內(nèi)部,以指定Mapper接口所在的包的方式注冊(cè)Mapper接口,代碼如下所示。<packagename="com.itheima.mapper"/>8.6.1定義SQL語(yǔ)句的標(biāo)簽(5)測(cè)試效果運(yùn)行文件8-8中的selectTest()方法,運(yùn)行效果如下圖所示。8.6.1定義SQL語(yǔ)句的標(biāo)簽<insert>標(biāo)簽用于定義插入語(yǔ)句,通過(guò)<insert>標(biāo)簽,開發(fā)者可以明確定義要執(zhí)行的插入操作的SQL語(yǔ)句,包括插入的數(shù)據(jù)和插入后的處理方式。用于指定是否返回生成的主鍵值,并將其設(shè)置到參數(shù)對(duì)象中useGeneratedKeys屬性與useGeneratedKeys屬性配合使用,用于指定傳入?yún)?shù)對(duì)象中用于接收生成主鍵值的屬性名keyProperty屬性用于指定生成主鍵值的數(shù)據(jù)庫(kù)字段名keyColumn屬性<insert>標(biāo)簽的常用屬性2.<insert>標(biāo)簽8.6.1定義SQL語(yǔ)句的標(biāo)簽(1)定義插入用戶方法在文件8-6的UserMapper接口中定義方法insertUser(),用于插入用戶信息,具體如下所示。下面通過(guò)一個(gè)插入用戶信息的案例,演示使用<insert>標(biāo)簽插入用戶信息。intinsertUser(Useruser);8.6.1定義SQL語(yǔ)句的標(biāo)簽(2)編寫映射信息在文件8-7的UserMapper.xml文件中根據(jù)傳入的用戶信息定義插入語(yǔ)句,具體如下所示。<!--插入用戶信息--><insertid="insertUser"parameterType="com.itheima.entity.User" useGeneratedKeys="true"keyProperty="id"> INSERTINTOuser(username)VALUES(#{username})</insert>8.6.1定義SQL語(yǔ)句的標(biāo)簽(3)定義測(cè)試方法在文件8-8中的MapperTest類中定義測(cè)試方法insertTest(),在測(cè)試方法中獲取UserMapper對(duì)象,并通過(guò)UserMapper對(duì)象調(diào)用其insertUser()方法插入用戶信息,具體如下所示。@TestpublicvoidinsertTest(){ //獲取SqlSession對(duì)象 SqlSessionsession=this.createSqlSession(); //獲取UserMapper對(duì)象 UserMappermapper=session.getMapper(UserMapper.class); Useruser=newUser(); user.setUsername("王五"); //插入用戶信息 mapper.insertUser(user);mit(); System.out.println(user);}8.6.1定義SQL語(yǔ)句的標(biāo)簽(4)測(cè)試效果運(yùn)行文件8-8中的insertUser()方法,運(yùn)行效果如下圖所示。8.6.1定義SQL語(yǔ)句的標(biāo)簽(1)定義更新用戶方法在文件8-6的UserMapper接口中定義方法updateUser(),用于更新用戶信息,具體如下所示。<update>標(biāo)簽用于定義更新語(yǔ)句,通過(guò)<update>標(biāo)簽,開發(fā)者可以明確定義要執(zhí)行的更新操作的SQL語(yǔ)句。下面通過(guò)一個(gè)更新用戶信息的案例演示<update>標(biāo)簽的使用。intupdateUser(Useruser);3.<update>標(biāo)簽8.6.1定義SQL語(yǔ)句的標(biāo)簽(2)編寫映射信息在文件8-7的UserMapper.xml文件中根據(jù)傳入的用戶信息定義更新語(yǔ)句,具體如下所示。<!--更新用戶信息--><updateid="updateUser"parameterType="com.itheima.entity.User"> UPDATEuserSETusername=#{username} WHEREid=#{id}</update>8.6.1定義SQL語(yǔ)句的標(biāo)簽(3)定義測(cè)試方法在文件8-8中的MapperTest類中定義測(cè)試方法updateUser(),在測(cè)試方法中獲取UserMapper對(duì)象,并通過(guò)UserMapper對(duì)象調(diào)用其updateUser()方法更新用戶信息,具體如下所示。@TestpublicvoidupdateUser(){ //獲取SqlSession對(duì)象 SqlSessionsession=this.createSqlSession(); //獲取UserMapper對(duì)象 UserMappermapper=session.getMapper(UserMapper.class); Useruser=newUser(); user.setId(3); user.setUsername("王老五"); //插入用戶信息 mapper.updateUser(user); mit(); Useru=mapper.findById(3); System.out.println(u);}8.6.1定義SQL語(yǔ)句的標(biāo)簽(4)測(cè)試效果運(yùn)行文件8-8中的updateUser()方法,運(yùn)行效果如下圖所示。8.6.1定義SQL語(yǔ)句的標(biāo)簽(1)定義更新用戶方法在文件8-6的UserMapper接口中定義方法deleteUser(),用于更新用戶信息,具體如下所示。4.<delete>標(biāo)簽<delete>標(biāo)簽用于定義刪除語(yǔ)句,下面通過(guò)刪除用戶信息演示<delete>標(biāo)簽的使用,具體如下。intdeleteUserById(intid);8.6.1定義SQL語(yǔ)句的標(biāo)簽(2)編寫映射信息在文件8-7的UserMapper.xml文件中根據(jù)傳入的用戶id定義刪除語(yǔ)句,具體如下所示。<!--刪除用戶信息--><deleteid="deleteUserById"parameterType="int"> DELETEFROMuserWHEREid=#{id}</delete>8.6.1定義SQL語(yǔ)句的標(biāo)簽(3)定義測(cè)試方法在文件8-8中的MapperTest類中定義測(cè)試方法deleteTest(),在測(cè)試方法中獲取UserMapper對(duì)象,并通過(guò)UserMapper對(duì)象調(diào)用其deleteUserById()方法刪除用戶信息,具體如下所示。@TestpublicvoiddeleteTest(){ //獲取SqlSession對(duì)象 SqlSessionsession=this.createSqlSession(); //獲取UserMapper對(duì)象 UserMappermapper=session.getMapper(UserMapper.class); //刪除用戶信息 mapper.deleteUserById(3); mit();Useruser=mapper.findById(3);System.out.println(user);}8.6.1定義SQL語(yǔ)句的標(biāo)簽(4)測(cè)試效果運(yùn)行文件8-8中的deleteTest()方法,運(yùn)行效果如下圖所示。8.6.2

定義結(jié)果集映射的標(biāo)簽先定一個(gè)小目標(biāo)!

先定一個(gè)小目標(biāo)!掌握定義結(jié)果集映射規(guī)則的標(biāo)簽,能夠在MyBatis映射文件中使用<resultMap>標(biāo)簽定義結(jié)果集映射規(guī)則8.6.2

定義結(jié)果集映射的標(biāo)簽在MyBatis映射文件中,定義映射規(guī)則的標(biāo)簽主要指的是用于描述查詢結(jié)果如何與Java對(duì)象屬性進(jìn)行映射的標(biāo)簽。這些標(biāo)簽用于處理復(fù)雜查詢結(jié)果的結(jié)構(gòu)化映射,確保查詢結(jié)果能夠正確地填充到目標(biāo)對(duì)象的屬性中。其中,<resultMap>標(biāo)簽為定義結(jié)果集映射的頂級(jí)標(biāo)簽,基于<resultMap>標(biāo)簽可以處理字段和屬性之間的不匹配,以及一對(duì)多、多對(duì)一的關(guān)系等復(fù)雜場(chǎng)景。8.6.2

定義結(jié)果集映射的標(biāo)簽<resultMap>標(biāo)簽提供了id屬性用于指定該映射的唯一標(biāo)識(shí)符,在映射文件中的其他配置可以通過(guò)id屬性的值引用此映射。<resultMap>標(biāo)簽的type屬性則用于指定要映射到的Java類的全限定名或別名。示例如下。<resultMapid="userResultMap"type="com.itheima.entity.User"></resultMap><resultMap>標(biāo)簽通常包括<id>、<result>、<association>、<collection>等子標(biāo)簽,用于定義如何將映射結(jié)果集映射到Java對(duì)象的屬性。8.6.2

定義結(jié)果集映射的標(biāo)簽javaType用于指定主鍵屬性的Java類型property用于指定Java對(duì)象中對(duì)應(yīng)的主鍵字段的屬性名jdbcType用于指定主鍵屬性在JDBC中的類型column用于指定數(shù)據(jù)庫(kù)表中對(duì)應(yīng)的主鍵字段名<id>子標(biāo)簽用于映射數(shù)據(jù)庫(kù)表的主鍵字段到Java對(duì)象的屬性。<id>子標(biāo)簽的主要屬性1.<id>子標(biāo)簽8.6.2

定義結(jié)果集映射的標(biāo)簽2.<result>子標(biāo)簽用于指定Java對(duì)象中的屬性名property用于指定數(shù)據(jù)庫(kù)表中的字段名column<result>子標(biāo)簽的主要屬性<result>子標(biāo)簽用于映射數(shù)據(jù)庫(kù)表的普通字段到Java對(duì)象的屬性8.6.2

定義結(jié)果集映射的標(biāo)簽3.<association>子標(biāo)簽<association>子標(biāo)簽用于映用于處理一對(duì)一的關(guān)系映射,將結(jié)果集中的關(guān)聯(lián)數(shù)據(jù)映射到Java對(duì)象中的另一個(gè)對(duì)象屬性。0102030405用于指定Java對(duì)象中對(duì)應(yīng)的屬性名,該屬性應(yīng)映射到一個(gè)復(fù)雜類型用于指定從主查詢結(jié)果中提取的某個(gè)字段值,該字段值將作為參數(shù)傳遞給通過(guò)select屬性定義的嵌套查詢用于指定屬性的Java類型用于指定一個(gè)預(yù)先定義的resultMap的id,當(dāng)關(guān)聯(lián)對(duì)象的映射較為復(fù)雜時(shí),需要引用已有的詳細(xì)映射規(guī)則時(shí)使用用于指定一個(gè)單獨(dú)的查詢來(lái)加載關(guān)聯(lián)對(duì)象,其值通常是一個(gè)映射器中定義的另一個(gè)<select>標(biāo)簽的idpropertycolumnjavaTyperesultMapselect<association>子標(biāo)簽的主要屬性8.6.2

定義結(jié)果集映射的標(biāo)簽(1)數(shù)據(jù)庫(kù)數(shù)據(jù)準(zhǔn)備文件8-9association.sql源代碼在名稱為mybatis的數(shù)據(jù)庫(kù)中,創(chuàng)建人員數(shù)據(jù)表person和身份證數(shù)據(jù)表idcard,并插入若干條測(cè)試數(shù)據(jù),具體SQL語(yǔ)句如文件8-9所示。下面基于<association>子標(biāo)簽實(shí)現(xiàn)人和對(duì)應(yīng)身份證信息的一對(duì)一關(guān)聯(lián)查詢的案例。8.6.2

定義結(jié)果集映射的標(biāo)簽(2)定義實(shí)體類文件8-10

Person.java文件8-11

IDCard.java源代碼在com.itheima.entity包下創(chuàng)建與數(shù)據(jù)表person和idcard對(duì)應(yīng)的實(shí)體類Person和IDCard,具體如文件8-10和文件8-11所示。8.6.2

定義結(jié)果集映射的標(biāo)簽(3)定義查詢?nèi)藛T信息的方法文件8-12PersonMapper.java源代碼在com.itheima.mapper包下創(chuàng)建操作Person對(duì)象和數(shù)據(jù)庫(kù)數(shù)據(jù)映射的Mapper接口PersonMapper,并在該接口中定義方法getPersonById(),具體如下文件8-12所示。8.6.2

定義結(jié)果集映射的標(biāo)簽(4)編寫映射信息文件8-13PersonMapper.xml源代碼在src/main/resources目錄的文件夾com/itheima/mapper下創(chuàng)建一個(gè)名稱為PersonMapper.xml的文件,在該文件定義查詢語(yǔ)句,在查詢語(yǔ)句中根據(jù)傳入的人員id查詢包含人員身份證信息的人員信息,具體如文件8-13所示。8.6.2

定義結(jié)果集映射的標(biāo)簽(5)定義測(cè)試方法getPersonById()方法源代碼在文件8-8中的MapperTest類中定義測(cè)試方法associationTest(),在測(cè)試方法中獲取PersonMapper對(duì)象,并通過(guò)PersonMapper對(duì)象調(diào)用其getPerson

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論