版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第一章MyBatis的基礎(chǔ)知識本章學(xué)習(xí)目標:了解ORM框架的原理了解MyBatis框架的工作流程和重要API掌握MyBatis的簡單程序的編寫在SSM框架體系中,MyBatis的作用是連接數(shù)據(jù)庫,完成數(shù)據(jù)的增刪改查等操作。和傳統(tǒng)的JDBC技術(shù)相比,MyBatis是一種ORM框架,它可以更加高效的完成數(shù)據(jù)庫的相關(guān)操作,使用起來也比較方便。本章介紹了MyBatis框架的概述,功能體系和工作流程,以及MyBatis的下載安裝和基本程序的編寫。1MyBatis概述1.1傳統(tǒng)JDBC的問題JDBC的全稱是JavaDataBaseConnectivity,也就是Java語言連接數(shù)據(jù)庫的一種技術(shù)。JDBC的本質(zhì)是SUN公司定義的一套接口,是一種面向接口的編程方式。目前市面上主流的數(shù)據(jù)庫技術(shù)較多,Oracle、MySQL和SQLserver等,它們的底層實現(xiàn)原理不一樣。通過java.sql.*包下的JDBC接口,可以讓一種編程語言,也就是Java程序接入不同的數(shù)據(jù)庫系統(tǒng),這就是JDBC技術(shù)的本質(zhì)和原理。雖然傳統(tǒng)JDBC可以解決基本的Java語言訪問數(shù)據(jù)庫的問題,但是它也存在著一定的缺陷和局限性。1MyBatis概述1.1傳統(tǒng)JDBC的問題1(1)頻繁的開啟和關(guān)閉數(shù)據(jù)庫連接。傳統(tǒng)JDBC在每次執(zhí)行SQL語句前,都需要重新建立數(shù)據(jù)庫連接,執(zhí)行完畢后需要關(guān)閉連接。頻繁的開啟和關(guān)閉數(shù)據(jù)庫連接會影響整體的系統(tǒng)性能,降低執(zhí)行效率。2(2)需要手動編碼管理數(shù)據(jù)庫連接。傳統(tǒng)JDBC不僅需要頻繁開啟和關(guān)閉數(shù)據(jù)庫連接,還需要手動編程來管理數(shù)據(jù)庫的開啟連接、事務(wù)處理、關(guān)閉連接等。這個編程過程比較繁瑣,且容易出錯。3(3)SQL語句硬編碼。在傳統(tǒng)的JDBC中,SQL語句通常和Java語句放在一起,且一般都是固定的字符串。這種硬編碼的形式不利于后期維護,代碼的復(fù)用性也較低。4(4)數(shù)據(jù)的安全性不高。傳統(tǒng)JDBC的SQL語句除了硬編碼外,基本都是采用字符串拼接的方式進行構(gòu)建。這種構(gòu)建SQL語句的方式容易受到惡意軟件的攻擊(例如SQL注入等),從而導(dǎo)致安全隱患問題,影響數(shù)據(jù)的安全性。1MyBatis概述1.1傳統(tǒng)JDBC的問題(5)代碼重復(fù)編寫。在傳統(tǒng)的JDBC開發(fā)過程中,由于SQL語句的復(fù)用性較低,每個新的數(shù)據(jù)庫請求都可能需要重新書寫或者構(gòu)建SQL語句,尤其是結(jié)果集ResultSet的定義,這會導(dǎo)致一定的重復(fù)代碼編寫。(6)代碼可讀性較差。在傳統(tǒng)JDBC的編程過程中,根據(jù)數(shù)據(jù)庫的連接請求需要書寫不同的SQL語句。隨著數(shù)據(jù)庫的請求的次數(shù)和復(fù)雜度的增加,對應(yīng)的SQL語句的長度和數(shù)量都會遞增。這些SQL語句和Java代碼混在一起,就顯得比較雜亂,大大的降低了代碼的可讀性。由于JDBC存在著一些問題,在中大型的企業(yè)級軟件系統(tǒng)開發(fā)中,一般使用更加先進的ORM框架技術(shù)來替代傳統(tǒng)的JDBC。1MyBatis概述1.2ORM框架技術(shù)針對傳統(tǒng)JDBC技術(shù)的缺陷,計算機專家們開始著手進行改進。改進的思想和路線主要分為兩種:第一種是對JDBC進行API層的接口封裝和增強,這種思想不改變JDBC使用的大致方式和習(xí)慣,也不改變它的底層實現(xiàn)原理,主要是讓開發(fā)者在編程層面可以更方便的使用。第二種是借鑒面向?qū)ο蟮木幊趟枷?,讓編程人員可以像操作對象的方式來操作數(shù)據(jù)庫,在這個過程中也盡量把SQL語句和Java語句進行剝離解耦,這種思想相當于把JDBC的傳統(tǒng)數(shù)據(jù)庫操作的思路進行了一定的重鑄。第二種思想的典型代表就是ORM框架技術(shù)。ORM的全稱是ObjectRelationMapping,即對象關(guān)系映射。這種技術(shù)吸收了面向?qū)ο蟮乃枷?,把對SQL的操作轉(zhuǎn)換成對對象的操作,將數(shù)據(jù)庫表數(shù)據(jù)和Java對象之間進行映射,如圖1-1所示。編程人員可以像操作Java對象一樣操作數(shù)據(jù)庫,這樣就可以提升操作效率,降低代碼的耦合度,使整體的系統(tǒng)更方便進行后期的維護和更新。1MyBatis概述1.2ORM框架技術(shù)圖1-1ORM框架與Java類映射示意圖Java語言本身就是采用了面向?qū)ο蟮木幊趟悸?,因此ORM框架技術(shù)非常適用于原生Java語言編程。開發(fā)人員在業(yè)務(wù)層對Java對象的操作,可以直接通過ORM框架延伸到數(shù)據(jù)庫層面,這樣可以大大的降低開發(fā)難度,提高開發(fā)效率。同時由于數(shù)據(jù)表和Java對象形成了映射,開發(fā)過程中也可以省略部分SQL語句,將SQL語句和Java語句剝離,讓系統(tǒng)變得更加易于維護。1MyBatis概述1.2ORM框架技術(shù)目前主流的ORM框架主要有Hibernate和MyBatis,它們的區(qū)別如下:(1)MyBatis框架比較小巧、高效、簡單,半自動化。Hibernate框架比較龐大、復(fù)雜、間接,同時是全自動ORM框架。(2)MyBatis框架中SQL語句的生成比較自由,Hibernate框架中的SQL生成則偏向全自動。MyBatis可以靈活定義SQL語句,從而滿足各種開發(fā)需求和性能優(yōu)化需求。(3)MyBatis框架的操作更為簡單,上手入門難度較低,相對Hibernate框架的入門難度較高。1MyBatis概述1.2ORM框架技術(shù)(4)ORM框架一般更多的使用場景是和其他開發(fā)框架融合在一起進行中大型軟件或web開發(fā)。其中,Hibernate框架常用于SSH框架,也就是Struts、Spring和Hibernate。MyBatis框架常用于SSM框架,也就是Spring、SpringMVC、MyBatis。綜合來看,雖然MyBatis需要手動編寫部分SQL語句,但是由于它輕量、簡單,功能也較為強大,因此是一個非常好用、優(yōu)秀的數(shù)據(jù)庫框架技術(shù)。1MyBatis概述1.3MyBatis的發(fā)展和特點MyBatis的前身是Apache組織下的一個開源項目iBatis。2010年,這個項目從ApacheSoftwareFoundation遷移到了GoogleCode,并改名為MyBatis。2013年11月,此項目又從Google遷移到了Github,之后由Github負責(zé)維護。iBatis一詞的來源是internet和abatis的組合,它是一個基于Java的持久層數(shù)據(jù)框架,它提供的持久層框架技術(shù)主要包括SQLMaps和DataAccessObject(DAO)。MyBatis是一個優(yōu)秀的ORM框架技術(shù),它的特點主要有三個。首先,MyBatis是支持定制化SQL、存儲過程以及高級映射的優(yōu)秀的持久層框架。其次,MyBatis避免了幾乎所有的JDBC代碼,以及傳統(tǒng)JDBC里繁復(fù)的手動設(shè)置參數(shù)和獲取數(shù)據(jù)集的方式。最后,MyBatis可以使用簡單的XML或注解方式配置映射,將數(shù)據(jù)接口和Java對象直接映射成數(shù)據(jù)庫中的數(shù)據(jù)。1MyBatis概述1.3MyBatis的發(fā)展和特點簡單來說,MyBatis是輕量級框架,學(xué)習(xí)使用門檻相對較低,在使用過程中需要手動編寫SQL代碼,功能強大且靈活,適用于各種中大型軟件系統(tǒng)的開發(fā)。2MyBatis的工作流程和重要API2.1MyBatis的工作流程在傳統(tǒng)JDBC中,執(zhí)行流程主要分為六個步驟:注冊驅(qū)動,獲取Connection連接,執(zhí)行預(yù)編譯,執(zhí)行SQL語句,封裝結(jié)果集和釋放資源。MyBatis是對傳統(tǒng)JDBC的優(yōu)化,它的執(zhí)行流程如圖1-2所示。圖1-2MyBatis框架工作流程示意圖具體來說,MyBatis框架的工作流程主要分為八個步驟。2MyBatis的工作流程和重要API2.1MyBatis的工作流程(1)讀取MyBatis框架的核心配置文件。文件中一般配置了數(shù)據(jù)庫連接信息、屬性信息、Java類的相關(guān)信息和別名、類型處理器、插件、環(huán)境、映射器等。讀取成功后會在Java上下文中封裝成一個Configuration對象。01(2)加載映射文件。映射文件的主要內(nèi)容是存放SQL語句,MyBatis通過讀取配置文件中的映射器路徑來加載映射文件。MyBatis框架可以同時加載多個映射文件,一般是通過文件的相對路徑來加載,也可以通過包掃描來加載。02(3)構(gòu)造會話工廠SqlSessionFactory。這里實際是使用了建造者的設(shè)計模式,通過會話工廠來生成和管理會話對象。一般來說,會話工廠的成功創(chuàng)建代表配置文件和映射文件被正確加載,可以進行后續(xù)的正常的MyBatis功能使用。032MyBatis的工作流程和重要API2.1MyBatis的工作流程(4)構(gòu)造會話對象SqlSession。根據(jù)建造者模式,會話對象通過會話工廠直接創(chuàng)建。會話對象里包含了執(zhí)行SQL語句的方法,開發(fā)者通過調(diào)用會話對象SqlSession來對數(shù)據(jù)庫進行增刪改查操作。需要注意的是,每個線程應(yīng)該有自己獨立的SqlSession實例,它不是線程安全的,因此不能被共享。(5)Executor執(zhí)行器生成SQL語句。它是MyBatis實際的底層運行核心,它主要負責(zé)SQL語句的生成和緩存的維護。根據(jù)會話對象SqlSession傳遞的參數(shù)動態(tài)的生成需要執(zhí)行SQL語句,同時負責(zé)查詢緩存的維護。(6)MappedStatement對象封裝SQL語句。一個MappedStatement對象代表了一個實際可運行的SQL語句標簽,其輸入和輸出分別對應(yīng)著相應(yīng)的參數(shù)映射和結(jié)果集。2MyBatis的工作流程和重要API2.1MyBatis的工作流程在右側(cè)編輯區(qū)輸入內(nèi)容(7)輸入?yún)?shù)映射。輸入?yún)?shù)主要是指SQL語句待確定的某些參數(shù),可以是int、String等基本數(shù)據(jù)類型,也可以是Map、List、Java類等復(fù)雜數(shù)據(jù)類型。輸入?yún)?shù)和SQL語句一起組成完整的數(shù)據(jù)庫請求,執(zhí)行后產(chǎn)生輸出。雖然MyBatis的工作流程相對復(fù)雜,但由于它做了較好的封裝。在實際用戶使用的過程中,只需根據(jù)要求調(diào)用對應(yīng)API接口即可,底層實現(xiàn)是感知不到的。這也是為什么說MyBatis使用簡單、但功能強大的原因之一。(8)輸出端的結(jié)果集封裝。在數(shù)據(jù)庫完成數(shù)據(jù)的增刪改查操作后,可以根據(jù)要求將結(jié)果進行封裝。輸出結(jié)果可以是普通的基本數(shù)據(jù)類型,也可以是Map、List、Java類等復(fù)雜數(shù)據(jù)類型。常用的封裝屬性是resultType和resultMap。2MyBatis的工作流程和重要API2.2MyBatis的重要API從MyBatis的工作流程圖里可以看到,執(zhí)行過程中比較重要的對象有四個,分別是會話工廠SqlSessionFactory,會話對象SqlSession,執(zhí)行器Executor和MappedStatement對象。其中,執(zhí)行器Executor和MappedStatement對象的執(zhí)行過程主要是MyBatis的底層實現(xiàn),對開發(fā)者是封閉不可見的。因此,使用MyBatis最重要的類主要是會話工廠SqlSessionFactory和會話對象SqlSession。2MyBatis的工作流程和重要APISqlSessionFactory對象每一個MyBatis應(yīng)用程序都以SqlSessionFactory為基礎(chǔ),它存在于MyBatis應(yīng)用的整個生命周期。重復(fù)創(chuàng)建SqlSessionFactory對象會造成數(shù)據(jù)庫資源的過度消耗。因此,一般一個mybatis應(yīng)用程序只需要創(chuàng)建一個SqlSessionFactory對象即可。創(chuàng)建SqlSessionFactory對象需要使用SqlSessionFactoryBuilder類的build()方法。具體的使用方法是:SqlSessionFactorybuild(InputStreaminputStream)其中,參數(shù)inputStream對應(yīng)MyBatis的配置文件的輸入流??梢酝ㄟ^Resources類的方法,使用配置文件的路徑名,來完成輸入流的轉(zhuǎn)換。2MyBatis的工作流程和重要APISqlSessionFactory對象InputStreaminputStream=Resources.getResourceAsStream(“文件路徑”);創(chuàng)建SqlSessionFactory對象后,主要用到兩個方法。一方面,openSession()方法可以創(chuàng)建SqlSession對象,通過設(shè)置不同的參數(shù)還可以生成自定義的SqlSession對象。另一方面,getConfiguration()方法可以用于獲取SqlSessionFactory對象的配置。SqlSessionFactory對象的主要方法如表1-1所示。表1-1SqlSessionFactory對象的方法2MyBatis的工作流程和重要APISqlSession對象SqlSession對象可以說是MyBatis的核心對象,它類似于傳統(tǒng)JDBC中的Connection對象,主要作用就是執(zhí)行數(shù)據(jù)層的持久化操作。在日常開發(fā)過程中,就是使用SqlSession對象來完成數(shù)據(jù)庫的增刪改查等操作。SqlSession對象的生命周期貫穿了數(shù)據(jù)庫訪問的整個過程。一般來說需要手動開啟和關(guān)閉SqlSession對象,尤其是長時間不使用時,需要調(diào)用close()方法來關(guān)閉從而節(jié)省系統(tǒng)資源。SqlSession對象的功能較為強大,封裝了執(zhí)行SQL語句、提交或回滾事務(wù)、使用映射器等方法。SqlSession對象的常用方法如表1-2所示。表1-2SqlSession對象的方法3MyBatis的下載和安裝3.1MyBatis的下載MyBatis是一個開源框架,可以通過訪問Github上的官網(wǎng)來進行相關(guān)資源的下載。具體的訪問地址為/mybatis/mybatis-3/releases,網(wǎng)頁如圖1-3所示。3MyBatis的下載和安裝3.1MyBatis的下載圖1-3MyBatis官網(wǎng)的下載頁面從頁面中可以找到最新版本和歷史版本的MyBatis的資源下載鏈接,讀者可以根據(jù)具體的使用需求進行下載即可。本教材使用的版本為MyBatis-3.5.2。一般來說,每個版本都有三個下載鏈接,分別對應(yīng)jar包資源、Windows系統(tǒng)下的源碼包和Linux系統(tǒng)下的源碼包。日常使用MyBatis的話,只需要下載第一個jar包資源即可。下載后對zip壓縮包進行解壓,可以看到MyBatis框架的所有文件資源。3MyBatis的下載和安裝3.1MyBatis的下載圖1-4MyBatis框架的文件資源mybatis-3.5.2.jar文件是MyBatis框架的核心類庫,在項目中需要將它導(dǎo)入工程來使用。mybatis-3.5.2.pdf文件是說明文檔,里面詳細講解了MyBatis框架的各種功能的使用方法。此外,還有一個lib文件夾。由于MyBatis的開發(fā)實現(xiàn)過程也借助了其他的開源庫,lib文件夾就是存放MyBatis所依賴的其他第三方庫,在使用的時候,需要和mybatis-3.5.2.jar一并導(dǎo)入工程,才能讓MyBatis框架正常使用。3MyBatis的下載和安裝3.2MySQL數(shù)據(jù)庫的安裝和使用MyBatis框架的功能主要是操作數(shù)據(jù)庫,因此在使用的時候需要先準備好數(shù)據(jù)庫的運行環(huán)境。本教材使用的版本是MySQLCommunityServer的文件夾版本,可以通過MySQL的官網(wǎng)進行下載。圖1-5MySQL的官網(wǎng)下載下載到本地后,對文件進行解壓。然后使用命令行進入根目錄下的bin文件夾,輸入初始化指令mysqld--initialize-insecure。如圖1-6所示。3MyBatis的下載和安裝3.2MySQL數(shù)據(jù)庫的安裝和使用圖1-6MySQL的初始化指令按下回車后,MySQL即開始運行初始化,稍等片刻后完成。此時返回MySQL解壓的根目錄,可以看到多了一個data文件夾,代表初始化成功。如圖1-7所示。3MyBatis的下載和安裝3.2MySQL數(shù)據(jù)庫的安裝和使用圖1-7MySQL初始化完成后創(chuàng)建的data文件夾如果有需要,此時還可以進一步修改root用戶的密碼。本教材為方便演示,使用原始的用戶密碼,即用戶名為root密碼為空。接下來回到剛剛的命令行界面,輸入MySQLServer的運行指令mysqld--console,MySQL服務(wù)器即開始運行。啟動期間在命令行可以看到相關(guān)詳情和指令,最后界面顯示如圖1-8則代表啟動成功。3MyBatis的下載和安裝3.2MySQL數(shù)據(jù)庫的安裝和使用圖1-8MySQLServer啟動成功如果需要關(guān)閉Server,在命令行界面按下Ctrl鍵+C鍵即可結(jié)束進程,或者直接關(guān)閉命令行窗口也可以。之后需要使用MySQL時,進入bin界面,打開命令行,輸入mysqld--console指令即可開啟數(shù)據(jù)庫服務(wù)?;蛘呤褂檬髽擞益I點擊bin文件夾下的mysqld.exe程序快捷方式,選擇“以管理員身份運行”也可以直接在命令行窗口中啟動數(shù)據(jù)庫服務(wù)。3MyBatis的下載和安裝3.2MySQL數(shù)據(jù)庫的安裝和使用后續(xù)的SSM編程需要使用Java語言訪問MySQL數(shù)據(jù)庫,因此需要導(dǎo)入對應(yīng)的接口jar包。本教材使用的版本是mysql-connector-java-5.1.47.jar,這個文件也可以從MySQL官網(wǎng)直接下載,下載后解壓即可得到對應(yīng)的jar包文件。圖1-9mysql-connector-java-5.1.47.jar3MyBatis的下載和安裝3.2MySQL數(shù)據(jù)庫的安裝和使用MySQLServer開啟運行后,還需要客戶端來訪問,這一步可以使用命令行指令用編程來實現(xiàn),也可以使用帶界面的MySQLClient客戶端。本教材使用免費開源的HeidiSQL客戶端來進行連接,對應(yīng)的程序可以在官網(wǎng)下載。圖1-10HeidiSQL官網(wǎng)下載3MyBatis的下載和安裝3.2MySQL數(shù)據(jù)庫的安裝和使用下載解壓后,打開heidisql.exe客戶端。點擊新建會話,這里可以對數(shù)據(jù)庫連接會話進行配置,包括網(wǎng)絡(luò)類型、主機名、用戶名、密碼和端口等。我們采用默認的參數(shù)即可,確保用戶名是root,密碼留空后,點擊打開連接。圖1-11使用HeidiSQL配置數(shù)據(jù)庫連接連接成功后,就可以創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表,對數(shù)據(jù)進行增刪改查等操作了。3MyBatis的下載和安裝3.2MySQL數(shù)據(jù)庫的安裝和使用圖1-12使用HeidiSQL成功連接數(shù)據(jù)庫為了方便后續(xù)對MyBatis框架的數(shù)據(jù)庫連接功能進行測試,使用HeidiSQL客戶端創(chuàng)建ssm數(shù)據(jù)庫,之后教材里用到的所有數(shù)據(jù)表均在此數(shù)據(jù)庫中。接下來創(chuàng)建一張學(xué)生表student,對應(yīng)的字段名和數(shù)據(jù)類型分別是:INT類型的id,VARCHAR類型的name,INT類型的age和VARCHAR類型的course。隨后插入幾條測試數(shù)據(jù),用于測試。3MyBatis的下載和安裝3.2MySQL數(shù)據(jù)庫的安裝和使用圖1-13使用HeidiSQL創(chuàng)建數(shù)據(jù)庫數(shù)據(jù)表并插入數(shù)據(jù)最后,SSM框架是Java編程的項目,本教材借助開源的IDE編程環(huán)境Eclipse來實現(xiàn)項目管理和編譯。Eclipse官網(wǎng)可以找到各個歷史版本的下載鏈接,本教材使用的是2023-03的Java企業(yè)級Web開發(fā)的版本。下載后,解壓到任意文件夾,即可通過Eclipse.exe程序來進行項目創(chuàng)建管理和編譯運行。3MyBatis的下載和安裝3.2MySQL數(shù)據(jù)庫的安裝和使用圖1-14Eclipse的官網(wǎng)下載通過上面的流程,主要是完成了三個重要的準備步驟:首先是MyBatis的jar包下載,其次是MySQL數(shù)據(jù)庫和數(shù)據(jù)的準備,最后是開發(fā)環(huán)境Eclipse的下載。至此,MyBatis框架使用的準備工作已經(jīng)完成,接下來可以正常使用MyBatis框架編程進行數(shù)據(jù)庫連接操作了。4MyBatis的簡單應(yīng)用的使用案例下面通過一個完整的示例講解MyBatis的基本使用。在這個示例中,主要涉及到的知識點是Java動態(tài)Web項目的創(chuàng)建、編譯,MyBatis的配置文件、映射文件和MyBatis框架核心API的調(diào)用。4MyBatis的簡單應(yīng)用的使用案例創(chuàng)建工程打開Eclipse,選擇新建項目中的DynamicWebProject也就是動態(tài)Web項目。相關(guān)選項和配置使用默認的,不用修改,最后點擊Finish完成即完成項目的創(chuàng)建。圖1-15MyBatis的項目創(chuàng)建4MyBatis的簡單應(yīng)用的使用案例項目的準備工作項目創(chuàng)建完成后,需要導(dǎo)入兩個比較重要的jar包,一個是MyBatis框架的核心包mybatis-3.5.2.jar,另一個是Java語言訪問MySQL的接口包mysql-connector-java-5.1.47.jar。將兩個jar包文件復(fù)制粘貼到項目WEB-INF文件夾下的lib文件夾里即可。創(chuàng)建簡單Java對象POJO(PlainOrdinaryJavaObject)的Java包com.pojo,包下面創(chuàng)建POJO類Student.java。創(chuàng)建映射文件的包com.mapper,包下面創(chuàng)建映射文件StudentMapper.xml。創(chuàng)建項目測試的包com.test,包下面創(chuàng)建項目測試的類TestMain.java。最后,在項目的Java根目錄下創(chuàng)建MyBatis框架的配置文件MybatisConfig.xml。完成后項目的結(jié)構(gòu)如下圖所示。4MyBatis的簡單應(yīng)用的使用案例項目的準備工作圖1-16MyBatis01項目的文件結(jié)構(gòu)示意圖4MyBatis的簡單應(yīng)用的使用案例編寫POJO類的代碼一般在POJO類中,代碼內(nèi)容主要包括成員變量的定義,構(gòu)造函數(shù)的定義,成員變量訪問函數(shù)getter和setter的定義,以及POJO對象的打印函數(shù)toString的定義。本項目中主要是完成成員變量的定義和打印函數(shù)toString的定義,具體代碼如下所示。Student.java01packagecom.pojo;02publicclassStudent{03privateintid;04privateStringname;05privateintage;4MyBatis的簡單應(yīng)用的使用案例編寫配置文件的代碼05<configuration>06<environmentsdefault="ssmmysql">07<environmentid="ssmmysql">08<transactionManagertype="JDBC"/>09<dataSourcetype="POOLED">10<propertyname="driver"value="com.mysql.jdbc.Driver"/>11<propertyname="url"value="jdbc:mysql://localhost:3306/ssm?useSSL=false"/>4MyBatis的簡單應(yīng)用的使用案例編寫映射文件的代碼映射文件也是xml格式,內(nèi)容主要是項目對應(yīng)的SQL語句,以及返回的數(shù)據(jù)集映射等。具體代碼如下所示。StudentMapper.xml01<?xmlversion="1.0"encoding="UTF-8"?>02<!DOCTYPEmapper03PUBLIC"-////DTDMapper3.0//EN"04"/dtd/mybatis-3-mapper.dtd">0302010504064MyBatis的簡單應(yīng)用的使用案例編寫項目的測試代碼項目最終是在Java環(huán)境中編譯運行,因此測試代碼也是Java文件。測試代碼的主要內(nèi)容包括配置文件的加載,SqlSessionFactory工廠對象和SqlSession會話對象的創(chuàng)建,映射文件中SQL語句的調(diào)用,以及得到的POJO對象的打印輸出。具體代碼如下所示。TestMain.java01packagecom.test;02importjava.io.IOException;03importjava.io.InputStream;04importorg.apache.ibatis.io.Resources;4MyBatis的簡單應(yīng)用的使用案例編寫項目的測試代碼05importorg.apache.ibatis.session.SqlSession;06importorg.apache.ibatis.session.SqlSessionFactory;07importorg.apache.ibatis.session.SqlSessionFactoryBuilder;08importcom.pojo.Student;09publicclassTestMain{10publicstaticvoidmain(String[]args){11//TODOAuto-generatedmethodstub4MyBatis的簡單應(yīng)用的使用案例項目測試結(jié)果項目中需要訪問MySQL數(shù)據(jù)庫,先打開前文中提到的MySQL下的bin文件夾,使用cmd命令行運行mysqld--console指令,完成MySQL服務(wù)的啟動。完成各文件的創(chuàng)建和代碼的編寫后,在Eclipse中右鍵點擊測試文件即TestMain.java,選擇RunAs下的JavaApplication,讓項目作為Java應(yīng)用啟動運行??梢栽贑onsole終端顯示器中看到最終的項目運行結(jié)果。將MySQL數(shù)據(jù)庫的student表中id為1的數(shù)據(jù)封裝成Student類的對象,并打印出來。4MyBatis的簡單應(yīng)用的使用案例項目測試結(jié)果圖1-17MyBatis簡單應(yīng)用示意圖5本章小結(jié)本章首先介紹了ORM框架的特性和MyBatis框架的發(fā)展歷程;其次介紹了MyBatis框架的工作流程和原理,講解了MyBatis框架的重要API的使用方法;接下來介紹了MyBatis框架的下載和使用方法,以及開發(fā)環(huán)境的搭建流程;最后,通過一個實際案例,講解了MyBatis框架的簡單應(yīng)用的項目編程方法。通過本章內(nèi)容的學(xué)習(xí),讀者應(yīng)該可以了解什么是MyBatis框架,它的優(yōu)勢和特點是什么,如何下載和配置MyBatis框架,以及如何在Eclipse程序中編寫MyBatis框架的項目代碼并測試運行。6習(xí)題1.SqlSession對象的什么方法可以用于執(zhí)行多條記錄的查詢()A.SelectOneB.SelectListC.CommitD.Update2.吸收了面向?qū)ο蟮乃枷耄褜QL的操作轉(zhuǎn)換成對對象的操作,將數(shù)據(jù)庫表數(shù)據(jù)和Java對象之間進行映射,這種技術(shù)稱之為_______________________________。3.請簡述MyBatis框架開發(fā)環(huán)境的準備步驟。謝謝第二章MyBatis的配置文件演講人2024-XX-XX本章學(xué)習(xí)目標:了解MyBatis配置文件的結(jié)構(gòu)和重要元素組成掌握MyBatis配置文件的編寫和使用方法 在開發(fā)MyBatis項目的過程中,配置文件的使用是非常重要的。除了在上一章里演示過的,需要在配置文件中進行必須的數(shù)據(jù)源信息的設(shè)置以及映射文件的路徑外,配置文件還有很多其他的功能。只有寫好MyBatis的配置文件,才可以正常使用其相關(guān)的各種功能,通過SqlSession對象來操作數(shù)據(jù)庫,發(fā)揮ORM框架的優(yōu)勢。本章接下來對MyBatis的配置文件進行詳細的介紹和講解。1配置文件概述1.1xml文件格式當項目中需要使用MyBatis框架時,首先就需要調(diào)用配置文件,從而完成框架模塊的實際加載。通過上一章內(nèi)容可知,MyBatis的配置文件是xml格式。這種文件的典型格式就是一個一個的元素標簽,通過嵌套的方式組成固定的結(jié)構(gòu)樣式。使用xml文件作為配置文件格式是很多框架技術(shù)的共同點,這么做主要是因為將xml文件用作配置文件有較多優(yōu)點。(1)可讀性強。xml文件使用標簽進行數(shù)據(jù)組織,內(nèi)容清晰,容易解讀。(2)跨語言和跨平臺。xml文件是純文本格式,可以方便的被任意文本編輯工具打開編輯或查看。(3)自描述性強。xml文件的結(jié)構(gòu)清晰定義了各元素的含義,文件本身就帶有對應(yīng)元素的解釋。1配置文件概述1.1xml文件格式1(4)易于擴展。通過xml文件,可以方便的編輯元素內(nèi)容或添加元素來實現(xiàn)相關(guān)配置項的擴展,不影響原有結(jié)構(gòu)。2(5)易于驗證。xml文件格式本身是帶有約束的,這個約束一般通過xml文件頂部的DTD或Schema來實現(xiàn)。帶有約束的xml文件格式可以方便的對其內(nèi)容進行檢查,防止出錯。3(6)豐富的工具支持。xml文件除了自身之外,還有連帶的xml編輯器和XSLT轉(zhuǎn)換等工具,都可以方便的使用。4(7)結(jié)構(gòu)化存儲。xml文件格式天然就是層級結(jié)構(gòu),可以方便的存儲數(shù)據(jù)。也可以對數(shù)據(jù)進行配置管理,或者傳輸?shù)炔僮鳌?配置文件概述1.2MyBatis的配置文件層次結(jié)構(gòu)MyBatis的官方文檔中,定義了配置文件的層次結(jié)構(gòu),如下所示。MybatisConfig.xml01<?xmlversion="1.0"encoding="UTF-8"?>02<!DOCTYPEconfigurationPUBLIC"-////DTDConfig3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">03<configuration>04<properties>05<propertyname="r"value=""/><plugins>28</dataSource>29</environment>30</environments>31<databaseIdProvidertype=""></databaseIdProvider>32<mappers>33<mapperresource=""/>34</mappers><plugins>35</configuration>在一個完整的MyBatis配置文件中,根元素是configuration,可以配置的子元素有屬性properties元素,設(shè)置settings元素,類型別名typeAliases元素,類型處理器typeHandlers元素,對象工廠objectFactory元素,插件plugins元素,環(huán)境enviroments元素,數(shù)據(jù)廠商標識databaseIdProvider元素,映射文件mappers元素等。需要注意的是,MyBatis配置文件中各個子元素的先后順序是固定的。比如屬性properties元素和設(shè)置settings元素應(yīng)該處于所有子元素的最前面,類型別名typeAliases元素應(yīng)該在環(huán)境enviroments元素前面,映射文件mappers元素應(yīng)該處于最后等。<plugins>配置文件需要嚴格按照對應(yīng)的格式和順序來書寫,否則MyBatis框架在載入的時候會報錯從而導(dǎo)致項目運行異常。2配置文件的常用元素2.1屬性properties元素properties是一個用于配置屬性的元素。在MyBatis的配置文件中,屬性可以理解成是編程語言里面的變量。通過在配置文件前面定義不同的屬性值,文件后面可以通過屬性的名稱來指向?qū)?yīng)的屬性值,從而方便對配置文件的關(guān)鍵要素進行更改和維護。屬性值的最常使用場景之一就是定義數(shù)據(jù)源的各個參數(shù),包括MySQL的訪問地址,用戶名和密碼等。一般來說,MyBatis可以使用兩種方式來定義屬性值。2配置文件的常用元素通過property子元素來定義properties是根元素configuration的子元素,而properties本身可以有property子元素。其中每一個子元素,對應(yīng)一個屬性定義。每個元素又對應(yīng)兩個需要設(shè)定的值(需要區(qū)分的是,這里的值也稱為xml元素的屬性值,和properties代表的屬性值名稱一致但含義不同),分別是name和value,它們的含義分別相當于編程語言里的變量名和變量值,在xml文件中定義的時候需要加上引號。具體的屬性定義代碼如下所示。<properties><propertyname="myDriver"value="com.mysql.jdbc.Driver"/>2配置文件的常用元素通過property子元素來定義<propertyname="myUrl"value="jdbc:mysql://localhost:3306/ssm?useSSL=false"/><propertyname="myUsername"value="root"/><propertyname="myPassword"value="root"/></properties>這樣就完成了四個屬性的定義,對應(yīng)的值分別是數(shù)據(jù)庫驅(qū)動,MySQL訪問地址,用戶名和密碼。當后續(xù)需要用到這幾個屬性值的時候,就可以通過引用屬性的名稱myDriver、myUrl、myUsername和myPassword來使用它們。具體的屬性使用代碼如下所示。2配置文件的常用元素通過property子元素來定義01<dataSourcetype="POOLED">05<propertyname="password"value="${myPassword}"/>03<propertyname="url"value="${myUrl}"/>02<propertyname="driver"value="${myDriver}"/>04<propertyname="username"value="${myUsername}"/></dataSource>062配置文件的常用元素通過property子元素來定義其中,引用所定義的屬性值的格式為${x},括號內(nèi)x的即代表已定義好的屬性名稱。也就是說,通過上面的屬性值定義和引用,最終完成了在MyBatis配置文件中傳遞變量或參數(shù)的目的。在這個例子中,當需要改變所配置的數(shù)據(jù)庫相關(guān)參數(shù)時,例如修改數(shù)據(jù)庫地址,或數(shù)據(jù)庫用戶名密碼,就可以直接修改配置文件里的properties元素對應(yīng)的屬性值即可,而配置文件其他部分內(nèi)容可以保持不變。通過這種方式,就加強了項目的可維護性。2配置文件的常用元素通過外部資源文件來定義屬性值所有的配置文件中需要用到的屬性值都可以放在properties元素內(nèi)部定義。當這些值的數(shù)量不多時,直接定義是可行的;但是當這些屬性值的定義較多,或修改比較頻繁時,直接定義在配置文件里會造成配置文件的內(nèi)容過于冗余,查看和編輯其他內(nèi)容就顯得不夠方便。這個時候,可以使用外部資源文件來定義屬性值,將屬性值的定義和配置文件進一步解耦,從而保留配置文件的高可讀性,同時也讓屬性值的修改更加方便。具體來說,可以在項目的src目錄下創(chuàng)建一個后綴名為properties的屬性文件,例如perties,將需要用到的屬性值直接用鍵值對的方式進行定義在文件里。具體代碼如下所示。jdbc.myDriver=com.mysql.jdbc.Driver2配置文件的常用元素通過外部資源文件來定義屬性值jdbc.myUrl=jdbc:mysql://localhost:3306/ssm?useSSL=falsejdbc.myUsername=rootjdbc.myPassword=root需要注意的是,這里每一個屬性值,對應(yīng)的名稱和值都是一個鍵值對,其中左邊就是即將引用的屬性名稱,右邊是即將引用的屬性的值;兩者用=符號連接,兩邊都不需要額外的引號。在完成資源文件內(nèi)的屬性值定義后,需要在配置文件中引用這個資源文件。對應(yīng)的代碼如下。2配置文件的常用元素通過外部資源文件來定義屬性值<propertiesresource="perties"></properties>properties元素的resource屬性用來指向需要引用的外部資源的路徑,這里直接使用perties文件名,意味著文件就放在src根目錄下。這樣就完成了外部資源文件的屬性值定義。在完成定義之后的使用方法,和使用子元素定義的屬性值使用方法一樣,具體代碼如下所示。<dataSourcetype="POOLED"><propertyname="driver"value="${jdbc.myDriver}"/>2配置文件的常用元素通過外部資源文件來定義屬性值<propertyname="url"value="${jdbc.myUrl}"/><propertyname="username"value="${jdbc.myUsername}"/><propertyname="password"value="${jdbc.myPassword}"/></dataSource>在這里,取用屬性值同樣使用的是${x}格式,其中x對應(yīng)的就是外部資源文件perties中每一個鍵值對等號=左邊的屬性名,實際對應(yīng)的值就是鍵值對等號=右邊的取值。2配置文件的常用元素通過外部資源文件來定義屬性值需要補充說明的是,建議使用properties進行屬性值定義時,盡量采取上述兩種方法中的一種即可,同時采用兩種可能會造成屬性名的重復(fù)定義。如果發(fā)生這種重復(fù)定義的情況,MyBatis的機制是會優(yōu)先以文件中的屬性值定義為準。2配置文件的常用元素2.2設(shè)置settings元素設(shè)置,顧名思義,就是對MyBatis框架的各個參數(shù)進行配置。設(shè)置使用settings元素,它是配置文件中較為復(fù)雜的一個元素,通過不同子元素的取值和設(shè)置,來控制和調(diào)節(jié)MyBatis框架的運行狀態(tài)和行為。具體來說,settings元素對應(yīng)的可設(shè)置項即子元素的說明如下表所示。表2-1設(shè)置settings元素的子元素setting元素內(nèi)的大部分子元素都有默認值,因此在一般情況下,如果是簡單使用MyBatis的基礎(chǔ)功能,可以免去設(shè)置setting元素的步驟。如果是對特定使用場景有特殊要求,例如開啟延遲加載等,就需要針對特定的子元素進行設(shè)置。對MyBatis的參數(shù)進行setting元素設(shè)置時,根據(jù)需要設(shè)置的參數(shù),在xml文件中為對應(yīng)子元素指定對應(yīng)的值即可。下面是一個簡單的示例。2配置文件的常用元素2.2設(shè)置settings元素<settingname="lazyLoadTriggerMethods"value="equals,clone,hashCode,toString"/</settings>上面展示的是簡單的setting元素示例,如果需要對其他子元素進行設(shè)置,對照表格和代碼樣進行展開即可。2配置文件的常用元素2.3設(shè)置typeAliases元素當使用MyBatis進行開發(fā)時,如果查詢結(jié)果是返回Java類對象,則經(jīng)常需要用到類的名稱。相關(guān)代碼如下。<selectid=”selectOneStudent”resultType=”com.ssm.Student”>select*fromstudentwhereid=1</select>resultType對應(yīng)的取值是類的完全限定名,也就是Java類的包名加類名,這種寫法顯得比較冗余。尤其當包名較長或者返回類型較多時,會降低代碼的可讀性。為了解決這個問題,MyBatis框架提供了包名縮寫的機制,即typeAliases元素,也就是別名。2配置文件的常用元素2.3設(shè)置typeAliases元素通過typeAliases的設(shè)置,可以將任意的包含完整包名路徑的類名映射成一個自定義字符串。當需要使用這個類的時候,省略包名路徑和完整類名,用別名替代即可。這樣可以較好的去除此部分的冗余,提高代碼的可讀性和可維護性。一般來說,typeAliases元素可以采用兩種方式進行配置,分別是typeAliase子元素和packages包掃描。2配置文件的常用元素typeAliase子元素當需要起別名的類數(shù)量不多時,可以針對每一個進行typeAliase子元素配置即可。對應(yīng)的代碼如下所示。<typeAliases><typeAliasesalias=”stu”type=”com.ssm.Student”/></typeAliases>經(jīng)過了typeAliase的別名定義,后續(xù)要用到完整限定類名com.ssm.Student時,只需要使用它的別名stu即可。具體代碼如下所示。<selectid=”selectOneStudent”resultType=”stu”>2配置文件的常用元素typeAliase子元素select*fromstudentwhereid=1</select>2.package元素typeAliases元素除了可以使用子元素進行逐個的別名設(shè)置之外,當需要設(shè)置的包或者類的數(shù)量較多時,還可以使用package元素進行批量的別名設(shè)置。這個方式我們也稱之為packa包掃描,這種方式可以針對某個Java包下面的所有Java類配置別名。對應(yīng)的代碼如下所示。<typeAliases><packagename=”com.ssm”/></typeAliases>2配置文件的常用元素typeAliase子元素這種方式默認給類的全稱起的別名為類名的全小寫英文。假設(shè)在這種情況下,com.ssm包下有com.ssm.Student和com.ssm.Teacher兩個類,則這段代碼的效果就是給這兩個類分別起別名為student和teacher。當需要使用的時候,直接使用別名即可。代碼如下。<selectid=”selectOneTeacher”resultType=”teacher”>select*fromteacherwhereid=1</select>這種起別名的方式,別名是系統(tǒng)按照規(guī)則自動映射的。如果在包掃描起別名的前提下,需要使用自定義的別名,可以進一步使用@Alias注解來進行覆蓋替換。對應(yīng)的代碼如下所示。2配置文件的常用元素typeAliase子元素@Alias(value=”tch”)publicclassTeacher{......}其中@Alias就是對應(yīng)的注解,這里就使用注解后的別名tch來替代了包掃描生成的teacher別名。注解是SSM框架里非常重要的編碼方式,這個在后續(xù)的章節(jié)內(nèi)容還會有詳細介紹和講解。在這里,讀者只需要簡單了解即可。2配置文件的常用元素2.4設(shè)置typeHandlers元素在使用MyBatis進行數(shù)據(jù)庫訪問的過程中,框架在為SQL語句設(shè)置參數(shù)或從結(jié)果集取值時,都需要通過類型處理器來完成數(shù)據(jù)的類型轉(zhuǎn)換。typeHandler即類型處理器,它的核心功能就是將數(shù)據(jù)從數(shù)據(jù)庫JDBC類型轉(zhuǎn)換到Java數(shù)據(jù)類型,或者反過來將Java數(shù)據(jù)類型轉(zhuǎn)換成數(shù)據(jù)庫JDBC類型。在MyBatis框架中,有一些是已經(jīng)定義好的常用類型處理器,如下表所示。表2-2常用的typeHandler類型處理器這些是MyBatis內(nèi)部已經(jīng)定義好的類型處理器,這些數(shù)據(jù)類型的轉(zhuǎn)換不需要進行設(shè)置或顯式聲明,MyBatis會自動檢測數(shù)據(jù)類型并完成轉(zhuǎn)換。在通常情況下,這些默認的類型轉(zhuǎn)換器就已經(jīng)可以完成絕大部分常規(guī)的MyBatis使用場景了。但是,當Java數(shù)據(jù)類型和數(shù)據(jù)庫JDBC數(shù)據(jù)類型不匹配且不能使用自定義類型轉(zhuǎn)換器解決時,就需要開發(fā)者自定義類型處理器。2配置文件的常用元素2.4設(shè)置typeHandlers元素自定義類型處理器需要實現(xiàn)TypeHandler接口或者集成BaseTypeHandler類,此部分內(nèi)容較為復(fù)雜暫時略過。在編寫完對應(yīng)的代碼后,可以通過配置文件里的typeHandlers元素來進行設(shè)置生效。具體代碼如下所示。<typeHandlers><typeHandlerjavaType=”String”jdbcType=”VARCHAR”handler=”com.ssm.handler.StringToVarcharHandler”/></typeHandlers>這里通過com.ssm.handler.StringToVarcharHandler類自定義了一個Java數(shù)據(jù)類型String和JDBC數(shù)據(jù)類型VARCHAR之間的轉(zhuǎn)換映射,通過它就可以完成對應(yīng)的雙向數(shù)據(jù)類型轉(zhuǎn)換。2配置文件的常用元素2.5設(shè)置ObjectFactory元素對象工廠也就是ObjectFactory,MyBatis框架需要通過它來創(chuàng)建結(jié)果集對象。在大部分默認情況下,MyBatis框架可以通過其預(yù)定義的DefaultObjectFactory來完成相關(guān)工作。但是在實際開發(fā)過程中,如果遇到需要開發(fā)者自定義干預(yù)結(jié)果集對象的創(chuàng)建過程時,就需要自定義ObjectFactory對象工廠。具體來說,完成自定義ObjectFactory對象工廠需要兩個步驟:首先要編寫ObjectFactory類,并使之繼承DefaultObjectFactory類,此部分較為復(fù)雜暫時略過;其次需要將寫好的ObjectFactory類配置到MyBatis的配置文件中,也就是寫入ObjectFactory元素。對應(yīng)的代碼如下。2配置文件的常用元素2.6設(shè)置environments元素在MyBatis的使用過程中,設(shè)置文件的environments元素主要是用來配置數(shù)據(jù)庫相關(guān)的信息。MyBatis是支持多環(huán)境的使用的,這些環(huán)境相關(guān)的配置信息就需要放在environments元素內(nèi)。不同的環(huán)境可以讓MyBatis來訪問不同的數(shù)據(jù)庫,同時,修改環(huán)境內(nèi)的相關(guān)信息,也可以讓MyBatis在多個不同的數(shù)據(jù)庫之間進行切換。而這些改動只需要修改environments元素內(nèi)的配置信息即可,對應(yīng)的SQL語句映射是不用改動的,這也是MyBatis作為數(shù)據(jù)庫訪問框架的優(yōu)勢之一。2配置文件的常用元素environments元素的使用方法具體來說,environments元素對應(yīng)的環(huán)境配置信息主要分為兩類,事務(wù)管理器和數(shù)據(jù)源信息。其中事務(wù)管理器通過transactionManager子元素進行配置,數(shù)據(jù)源則通過dataSource來進行配置,也就是數(shù)據(jù)庫的訪問信息。具體的代碼如下所示。<environmentsdefault="ssmmysql01"><environmentid="ssmmysql01"><transactionManagertype="JDBC"/><dataSourcetype="POOLED"><propertyname="driver"value="${myDriver01}"/>2配置文件的常用元素environments元素的使用方法</environment></environments>代碼中定義了兩個environment環(huán)境,其id值分別為ssmmysql01和ssmmysql02。在第一個環(huán)境中,事務(wù)管理器transactionManager對應(yīng)的type是JDBC,數(shù)據(jù)源dataSource對應(yīng)的type類型是POOLED。數(shù)據(jù)源也就是數(shù)據(jù)庫的四個屬性數(shù)據(jù)庫驅(qū)動driver、數(shù)據(jù)庫地址url、用戶名username和密碼password,其對應(yīng)的值分別是${myDriver01}、${myUrl02}、${myUsername03}和${myPassword04}。第二個環(huán)境的配置信息類似。2配置文件的常用元素environments元素的使用方法實際開發(fā)過程中可以根據(jù)需要來定義多個不同的environment,每一個對應(yīng)的id值也不同。代碼第一行<environmentsdefault="ssmmysql01">指的是,在當前的MyBatis環(huán)境配置中,默認啟用的是id為ssmmysql01的環(huán)境environment。如果需要切換到第二個id為ssmmysql02的環(huán)境,需要手動更改配置后才能啟用。2配置文件的常用元素數(shù)據(jù)源的設(shè)置方法從示例代碼中可以看到,不管是事務(wù)管理器transactionManager,還是數(shù)據(jù)源dataSource,都需要設(shè)定一個type類型的值。對于事務(wù)管理器來說,常用的type類型取值有JDBC和MANAGED。其中JDBC事務(wù)管理器直接使用了JDBC的提交和回滾設(shè)置,它依賴于從數(shù)據(jù)源獲取的連接來管理事務(wù)的生命周期和作用域。MANAGED事務(wù)管理器則不自主提交或回滾連接,而是讓容器來管理事務(wù)的生命周期和作用域。在日常開發(fā)過程中,一般使用JDBC即可滿足基本的開發(fā)需求。數(shù)據(jù)源dataSource的type類型取值主要是用來配置MyBatis獲取連接的數(shù)據(jù)資源的方式。一般可選的取值有三個,分別是UNPOOLED、POOLED和JNDI。2配置文件的常用元素數(shù)據(jù)源的設(shè)置方法(1)UNPOOLED代表非連接池連接,它在每一次連接時都會新建連接,對于相關(guān)的資源沒有復(fù)用,但是也確保了數(shù)據(jù)的安全。這種方式適用于對數(shù)據(jù)連接性能要求不高的簡單應(yīng)用場景,也是本教材使用較多的一種情況。具體的屬性和對應(yīng)說明如下表所示。表2-3UNPOOOLED數(shù)據(jù)源需要配置的屬性(2)POOLED代表連接池連接,它利用數(shù)據(jù)池的方式將數(shù)據(jù)源進行連接,這樣可以適當節(jié)省每次創(chuàng)建新的連接時所消耗的初始化和認證等相關(guān)時間或資源。這種方式適用于對并發(fā)數(shù)有要求,或者對數(shù)據(jù)連接性能有一定要求的引用場景。它的可配置屬性項比UNPOOLED非連接池類型的要多,具體的屬性和對應(yīng)說明如下表所示。表2-4POOOLED數(shù)據(jù)源需要配置的屬性2配置文件的常用元素數(shù)據(jù)源的設(shè)置方法(3)JNDI類型的數(shù)據(jù)源可以連接外部的應(yīng)用服務(wù)器,它無需配置連接參數(shù),只需要指定外部容器的引用即可。這種類型的數(shù)據(jù)源的應(yīng)用場景不多,讀者簡單了解即可。具體的屬性和對應(yīng)說明如下表所示。表2-5JNDI數(shù)據(jù)源需要配置的屬性2配置文件的常用元素2.7設(shè)置mappers元素MyBatis框架在使用的過程中,可以將SQL語句從Java語句中剝離出來,放到映射文件中。在配置文件中,就是通過mappers元素來引用映射文件的。使用mappers引用映射文件的方式主要有兩種,一種是通過資源文件的路徑來直接引用,另外一種是通過包掃描的方式。這兩種方式也分別對應(yīng)了映射文件的兩種實現(xiàn)方法。2配置文件的常用元素引用資源文件的路徑映射文件最常用的實現(xiàn)方法,就是將SQL語句寫到XML形式的映射文件中。這種方式需要用到mappers元素下的mapper子元素。將映射文件看成一種資源文件,把它在項目中的文件路徑引用進來,賦值給mapper子元素的resource屬性即可。需要注意的是,路徑中用/符號來代表子目錄。具體的代碼如下所示。<mappers><mapperresource="com/mapper/StudentMapper.xml"/></mappers>2配置文件的常用元素包掃描映射文件除了使用XML文件來實現(xiàn)外,還可以使用接口的方式來實現(xiàn)。這個時候映射文件就不再是XML文件,而是Java文件。這種方式需要用到mappers元素下的package子元素,將映射文件所在的包名賦值給package子元素的name屬性即可。具體的代碼如下所示。<mappers><packagename="com.mapper"/></mappers>這里只描述了映射文件使用XML或Java接口兩種實現(xiàn)方式時,配置文件如何引用映射文件。具體所對應(yīng)的映射文件的寫法,在后續(xù)映射文件有關(guān)的內(nèi)容中會詳細講解。3MyBatis的配置文件的使用案例下面通過一個完整的案例,來講解MyBatis框架的配置文件的使用方法。3MyBatis的配置文件的使用案例數(shù)據(jù)準備進入MySQL的bin文件夾,打開cmd命令行,輸入指令mysqld--console開啟MySQL的服務(wù)。打開HeidiSQL客戶端,連接數(shù)據(jù)庫,新建student數(shù)據(jù)表,并插入以下測試數(shù)據(jù)。圖2-1student數(shù)據(jù)表中插入測試數(shù)據(jù)示意圖3MyBatis的配置文件的使用案例創(chuàng)建工程打開Eclipse客戶端,按照默認參數(shù)創(chuàng)建DynamicWebProject動態(tài)web項目。在項目的main/webapp/WEB-INF/lib文件夾中,添加MyBatis框架所需的jar包,包括mybatis.jar和mysql-connector-java.jar。在Java文件夾下創(chuàng)建不同的包,用于放置映射文件的com.mapper、放置Java類的com.pojo、放置測試代碼的com.test。3MyBatis的配置文件的使用案例創(chuàng)建Java類文件在com.pojo包下,新建一個Java類Student.java,代碼如下。101packagecom.pojo;202publicclassStudent{303privateintid;404privateStringname;505privateintage;606privateStringcourse;707@Override808publicStringtoString(){9Student.java103MyBatis的配置文件的使用案例創(chuàng)建Java類文件09return"Student[id="+id+",name="+name+",age="+age+",course="+course+"]";10}3MyBatis的配置文件的使用案例}這是一個簡單的Java類,成員變量的名稱和數(shù)據(jù)類型,與數(shù)據(jù)庫中的student表的字段設(shè)置一致。因此在使用MyBatis框架讀取數(shù)據(jù)表中的數(shù)據(jù)條目時,可以自動拼裝生成Java對象。3MyBatis的配置文件的使用案例創(chuàng)建數(shù)據(jù)庫配置文件在項目的代碼文件根目錄src/main/java下,創(chuàng)建數(shù)據(jù)庫的配置文件perties,代碼如下。perties01jdbc.myDriver=com.mysql.jdbc.Driver02jdbc.myUrl=jdbc:mysql://localhost:3306/ssm?useSSL=false03jdbc.myUsername=root04jdbc.myPassword=數(shù)據(jù)庫配置文件的文件名是perties,實際是作為文本文件編輯。在文件中主要定義了數(shù)據(jù)庫的驅(qū)動、訪問地址、用戶名和密碼,此文件后續(xù)可以被MyBatis框架的配置文件讀取后,作為數(shù)據(jù)庫的配置信息來使用。3MyBatis的配置文件的使用案例<settings>第06~13行,是properties元素的兩種用法,分別是直接定義property子元素,和引用perties外部文件。由于兩個方法都是定義數(shù)據(jù)庫的配置信息,因此在實際開發(fā)中,僅保留使用一種即可。這里為了方便演示,注釋調(diào)property子元素,保留外部文件的引用。第14~30,是MyBatis框架的setting設(shè)置項,包括緩存開關(guān)cacheEnabled、懶加載lazyLoadingEnabled等。第31~33行,是別名typeAliases的配置信息??梢酝ㄟ^typeAlias元素的alias屬性,給Java類起別名。別名生效后,就可以使用簡短的別名來替代Java類的全稱。3MyBatis的配置文件的使用案例<settings>第34~38行,分別是typeHandlers、objectFactory、plugins的配置信息,這些元素在MyBatis框架的基礎(chǔ)使用中較少使用,此處僅作為演示,讀者了解一下即可。第29~55行,是environments的配置信息,其中最主要的是使用dataSource子元素來配置數(shù)據(jù)庫信息。由于前面使用了properties的兩種用法來定義數(shù)據(jù)庫信息,這里也保留了兩種引用方法。實際開發(fā)過程中,根據(jù)需要選擇適合的方法來使用即可。第56行,是databaseIdProvider的配置信息。第57~60行,是mapper映射文件的配置信息。第58行是使用類路徑的方式定義映射文件,第59行是使用包掃描的方式定義映射文件。在實際開發(fā)過程中,一般選用一種3MyBatis的配置文件的使用案例項目測試在Eclipse中,右鍵點擊測試文件TestMain.java,選擇RunAsJavaApplication,將測試文件作為Java項目來運行。控制臺輸出如下。圖2-2MyBatis框架的配置文件的使用測試圖可以看到,查詢數(shù)據(jù)的結(jié)果正常,MyBatis框架的配置文件的使用正確。在實際開發(fā)過程中,讀者也可以根據(jù)具體情況,對配置文件中的各項參數(shù)做對應(yīng)的修改。4本章小結(jié)本章首先通過官方文檔,介紹了MyBatis框架的配置文件的層次結(jié)構(gòu);其次分別介紹了properties、settings、typeAliases、typeHandlers、ObjectFactory、environments等元素的含義和具體使用方法;最后通過一個完整的案例講解了MyBatis框架的配置文件的具體使用方法。通過本章的學(xué)習(xí),讀者可以充分理解MyBatis框架的配置文件的主要內(nèi)容,了解各個重要的屬性的功能和設(shè)置方法,掌握MyBatis框架的配置文件在實際使用中的配置方法。5習(xí)題1.使用typeAliases給Java類定義別名時,除了使用typeAliase子元素,還可以使用()A.property子元素B.setting元素C.外部文件D.package包掃描2.定義數(shù)據(jù)源dataSource時,屬性driver主要是用來設(shè)置___________________________________的值。3.請簡述配置文件中mapper元素的使用方法。謝謝第三章MyBatis的映射文件演講人2024-XX-XX本章學(xué)習(xí)目標:了解MyBatis框架的映射文件的結(jié)構(gòu)掌握映射文件的重要元素的功能和使用方法掌握resultMap結(jié)果集的使用方法MyBatis框架有很多的優(yōu)點,其中之一就是可以解決傳統(tǒng)JDBC訪問數(shù)據(jù)庫時SQL語句和Java語句耦合在一起的情況。在MyBatis框架中,SQL語句是從Java語句中剝離出來,單獨放在另外的映射文件中的。因此,我們很容易聯(lián)想到,映射文件的主要作用,就是來管理這些SQL語句,從而可以方便Java層對SQL語句進行調(diào)用,從而完成數(shù)據(jù)庫的增刪改查。在這種編程模式下,所有的SQL語句放在一起,可以方便的進行管理和維護,同時,也對業(yè)務(wù)層的Java代碼影響較小,是一種高效的數(shù)據(jù)庫操作思路。1映射文件概述嚴格來說,MyBatis中管理SQL語句的模塊應(yīng)該成為映射器,而不是映射文件。映射器的實現(xiàn)方式有兩種,第一種就是XML形式的映射文件,也就是本教材主要講解、應(yīng)用較為普遍的一種方式;還有另外一種是java接口形式的映射器,主要配合注解來實現(xiàn),這部分內(nèi)容會放在后續(xù)講MyBatis注解功能的時候再詳細展開。本章主要講解的就是XML形式的映射文件。1映射文件概述1.1映射文件的子元素因為是XML文件,所以它的主要結(jié)構(gòu)方式和配置文件類似,都是一個一個的元素來組成的。具體如下表所示。表3-1映射文件的子元素1映射文件概述1.2映射文件的典型范例其中,select、insert、update、delete四個元素分別對應(yīng)數(shù)據(jù)庫操作的增刪改查,SQL語句就分別寫在這些元素中,這也是映射文件的主體部分。一個相對完整的典型映射文件的具體代碼如下所示。StudentMapper.xml01<?xmlversion="1.0"encoding="UTF-8"?>02<!DOCTYPEmapper03PUBLIC"-////DTDMapper3.0//EN"select28<includerefid="stuField">29<propertyname="table"value="s"/>30</include>31fromstudentswhereid=#{id}32</select>33<!--ResulMap兩種用法:1.數(shù)據(jù)表的字段名和POJO類屬性名不一樣,可以手動指定-->34<resultMapid="stu2teaResultMap"type="tea">35<idproperty="id"column="id"/>select36<resultproperty="name"column="name"/>37</resultMap>38<selectid="selectStu2Tea"parameterType="int"resultMap="stu2teaResultMap">39select*fromstudentwhereid=#{id}40</select>41<!--ResulMap兩種用法:2.將跨多表查詢的值,拼成一個POJO對象(關(guān)聯(lián)映射的時候再講)-->2常用的映射文件元素2.1select元素select元素是MyBatis框架最常使用的元素之一,它主要是映射查詢功能的SQL語句。select元素對應(yīng)的代碼如下。<selectid="selectStudent"parameterType="int"resultType="com.pojo.Student">select*fromstudentwhereid=#{id}</select>屬性id對應(yīng)的是SQL語句的唯一標識,在映射文件中,任何的增刪改查SQL語句所對應(yīng)的select、insert、update、delete元素的id值,都必須是唯一不重復(fù)的。2常用的映射文件元素2.1select元素這段代碼的核心內(nèi)容就是select元素內(nèi)部的一段SQL語句select*fromstudentwhereid=#{id},它是一個典型的查詢語句。通過傳入的參數(shù)id來查詢student表的值,并將返回的值拼裝成com.pojo.Student類的對象,以供業(yè)務(wù)層的Java語句來直接使用。其中#{id}是占位符,對應(yīng)的是屬性parameterType傳進來的int類型參數(shù)值。表3-2select元素的屬性上表列出了select元素的常用屬性和其說明,雖然select元素的屬性較多較為復(fù)雜,但是常用的主要是id、parameterType、resultType、resultMap等,讀者在學(xué)習(xí)初期重點掌握這幾種即可。2常用的映射文件元素2.1select元素3.2.2insert元素和select元素類似,insert元素也是映射文件最常用的元素之一,它對應(yīng)的主要是插入功能的SQL語句。和select元素不同的是,insert元素在執(zhí)行數(shù)據(jù)的插入操作后,會返回一個整數(shù),來表示進行插入操作后的記錄數(shù)。insert元素的使用代碼如下。<insertid="insertStudent"parameterType="com.pojo.Student">insertintostudent(id,name,age,course)values(#{id},#{name},#{age},#{course})</insert>2常用的映射文件元素2.1select元素在這里,SQL語句指定了向student數(shù)據(jù)表中插入一條數(shù)據(jù),對應(yīng)的id、name、age、course字段分別對應(yīng)的值是#{id}、#{name}、#{age}和#{course}。但是觀察代碼,并沒有對應(yīng)的參數(shù)傳入,取而代之的是parameterType="com.pojo.Student"。和select元素中返回數(shù)據(jù)類型直接為Java類一樣,這里也是MyBatis作為ORM框架的特點之一,傳入的參數(shù)也可以直接使用Java類對象。實際的SQL語句的參數(shù)值#{id}、#{name}、#{age}和#{course},分別對
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年農(nóng)業(yè)研學(xué)旅行課程設(shè)計方法
- 2026年企業(yè)宣傳片拍攝制作指南
- 2026年教育信息化深度融合應(yīng)用課
- 白銀資源回收與再生利用手冊
- 2026湖南長沙市開福區(qū)青竹湖湘一健翎學(xué)校春季教師招聘8人備考題庫及完整答案詳解一套
- 2026年農(nóng)業(yè)知識產(chǎn)權(quán)海外布局方法
- 赤壁懷古課件
- 職業(yè)噪聲性耳鳴的早期篩查策略
- 職業(yè)健康風(fēng)險評估中的毒理學(xué)應(yīng)用方法
- 職業(yè)健康監(jiān)護的全程化管理
- 2026湖北十堰市丹江口市衛(wèi)生健康局所屬事業(yè)單位選聘14人參考考試題庫及答案解析
- 手術(shù)區(qū)消毒和鋪巾
- (正式版)DBJ33∕T 1307-2023 《 微型鋼管樁加固技術(shù)規(guī)程》
- 2025年寵物疫苗行業(yè)競爭格局與研發(fā)進展報告
- 企業(yè)安全生產(chǎn)責(zé)任培訓(xùn)課件
- 綠化防寒合同范本
- 2025年中國礦產(chǎn)資源集團所屬單位招聘筆試參考題庫附帶答案詳解(3卷)
- 煙草山東公司招聘考試真題2025
- 海爾管理會計案例分析
- 水果合同供貨合同范本
- 酒吧宿舍管理制度文本
評論
0/150
提交評論