版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
軟件架構(gòu)設(shè)計(jì)實(shí)戰(zhàn)——基于SSM框架Software
Architecture
Design
Practice
Based
on
SSM
Framework第9章MyBatis框架基礎(chǔ)123MyBatis概述MyBatis重要API簡介MyBatis的配置文件4第一個(gè)MyBatis應(yīng)用程序MyBatis概述在面向?qū)ο蟪绦蛟O(shè)計(jì)當(dāng)中我們所面對的是一個(gè)一個(gè)的對象,而在關(guān)系型數(shù)據(jù)庫中,所面對的是實(shí)體以及實(shí)體之間的關(guān)系,在程序設(shè)計(jì)中我們經(jīng)常面臨的問題是面向?qū)ο蟪绦蛟O(shè)計(jì)中的對象與關(guān)系型數(shù)據(jù)庫中實(shí)體之間的轉(zhuǎn)換,需要程序員編寫大量的、重復(fù)的、與業(yè)務(wù)邏輯無關(guān)的代碼,這種機(jī)械性的工作能不能被簡化呢?11.1傳統(tǒng)JDBC的劣勢隨著軟件開發(fā)技術(shù)的不斷升級,軟件開發(fā)工具的不斷進(jìn)步,采用JDBC數(shù)據(jù)庫連接方式的弊端也越來越明顯,主要表現(xiàn)為以下四個(gè)方面:(1)SQL語句在代碼中硬編碼,造成代碼不易維護(hù)。(2)數(shù)據(jù)表之間存在各種關(guān)系,包括一對一、一對多、多對多、級聯(lián)等。如果采用JDBC編程的方式維護(hù)數(shù)據(jù)表之間的關(guān)系,過程較為復(fù)雜并且容易出錯(cuò)。(3)數(shù)據(jù)庫連接創(chuàng)建、釋放頻繁,會造成系統(tǒng)資源浪費(fèi),從而影響系統(tǒng)性能。(4)雖然在JDBC中提供了預(yù)處理接口PreparedStatement,但是用PreparedStatement向占位符傳參數(shù)存在硬編碼,因?yàn)镾QL語句的where條件不一定,可能有時(shí)多也可能有時(shí)少,修改SQL語句需要修改代碼,造成系統(tǒng)不易維護(hù)。1.2ORM簡介MVC設(shè)計(jì)模式實(shí)現(xiàn)了表現(xiàn)層(即View)和數(shù)據(jù)處理層(即Model)的解耦合,而持久化層的設(shè)計(jì)則是要實(shí)現(xiàn)數(shù)據(jù)處理層內(nèi)部的業(yè)務(wù)邏輯和數(shù)據(jù)邏輯的解耦合。而ORM采用映射元數(shù)據(jù)來描述對象關(guān)系的映射,使得ORM能在任何一個(gè)應(yīng)用的業(yè)務(wù)邏輯層和數(shù)據(jù)庫層之間充當(dāng)橋梁,可以讓我們通過類和類對象就能操作它所對應(yīng)的表格中的數(shù)據(jù)。ORM映射1.2ORM簡介在ORM的映射當(dāng)中,面向?qū)ο蟪绦蛟O(shè)計(jì)中的類映射成關(guān)系型數(shù)據(jù)庫中的表(可能一個(gè)表,可能多個(gè)表,也可能一個(gè)表的部分字段),一般采用XML文件的形式進(jìn)行描述;而具體的一個(gè)個(gè)對象則映射為數(shù)據(jù)庫表中的一條條記錄,對象的屬性映射為數(shù)據(jù)庫表中的字段。1.2ORM簡介(1)HibernateHibernate是一個(gè)開放源代碼的對象關(guān)系映射框架,它對JDBC進(jìn)行了較為輕量級的對象封裝,它將對象與數(shù)據(jù)庫表建立映射關(guān)系,是個(gè)全自動(dòng)的ORM框架,Hibernate可以自動(dòng)生成SQL語句、并自動(dòng)執(zhí)行,使得Java程序員可以隨心所欲的使用面向?qū)ο缶幊趟季S來操作數(shù)據(jù)庫,通過操作對象的方式來操作數(shù)據(jù)庫極大的提高開發(fā)的效率。1.2ORM簡介(2)MyBatisMyBatis是一種“半自動(dòng)化”的ORM框架,和Hibernate不同,MyBatis需要手動(dòng)提供POJO(PlainOldJavaObjects)、SQL語句并匹配映射關(guān)系,正因?yàn)榇耍梢愿屿`活地生成映射關(guān)系。MyBatis充分允許開發(fā)人員利用數(shù)據(jù)庫的各項(xiàng)功能,例如存儲過程、視圖、復(fù)雜查詢等,具有高度靈活性、可優(yōu)化、易維護(hù)等優(yōu)點(diǎn)。與Hibernate相比,使用MyBatis的編碼量較大,但這并不影響它在一些復(fù)雜的和需要優(yōu)化性能的項(xiàng)目中使用。1.3MyBatis簡介MyBatis本是apache的一個(gè)開源項(xiàng)目iBatis,2010年這個(gè)項(xiàng)目由apachesoftwarefoundation遷移到了googlecode,并且改名為MyBatis。在MyBatis中也采用了工廠模式進(jìn)行對象創(chuàng)建與管理,每個(gè)MyBatis應(yīng)用程序主要都使用了SqlSessionFactory實(shí)例,一個(gè)SqlSessionFactory實(shí)例可以通過SqlSessionFactoryBuilder獲得。1.3MyBatis簡介MyBatis的主要優(yōu)點(diǎn)包括以下四個(gè)方面:(1)通過參數(shù)映射方式,實(shí)現(xiàn)了SQL和Java代碼的分離,解除SQL語句與程序代碼的耦合,可以將參數(shù)靈活的配置在SQL語句的配置文件XML中,避免在Java類中配置參數(shù)。(2)通過輸出映射機(jī)制,將結(jié)果集的檢索自動(dòng)映射成相應(yīng)的Java對象,避免對結(jié)果集手工檢索。(3)Mybatis也采用非侵入式設(shè)計(jì),使用簡單,沒有任何第三方依賴,最簡單安裝只要兩個(gè)jar文件+配置幾個(gè)SQL映射文件,易學(xué)易用。通過文檔和源代碼,可以比較完全的掌握它的設(shè)計(jì)思路和實(shí)現(xiàn)。(4)Mybatis不會對應(yīng)用程序或者數(shù)據(jù)庫的現(xiàn)有設(shè)計(jì)強(qiáng)加任何影響,SQL寫在XML里,便于統(tǒng)一管理和優(yōu)化。通過SQL語句可以滿足操作數(shù)據(jù)庫的所有需求。Mybatis可以通過XML配置文件對數(shù)據(jù)庫連接進(jìn)行管理。課程思政MyBatis的前身是iBatis,iBatis是ClintonBegin于2001年發(fā)起的一個(gè)開放源代碼項(xiàng)目,目的是發(fā)展密碼軟件的解決方案。從MyBatis的發(fā)展歷程可以看出,其發(fā)展過程并不是一帆風(fēng)順的,也經(jīng)歷了很多磨難和變遷,所以大家一定要清晰的認(rèn)識到科研的道路一定要經(jīng)得起沉浮、耐得住寂寞、不怕失敗、刻苦專研,總能守得日出見云開。在軟件項(xiàng)目開發(fā)中使用MyBatis能夠給程序員帶來諸多的便利性,減少大量的重復(fù)代碼編寫,提高軟件開發(fā)的效率。作為軟件從業(yè)人員一定要有高尚的情懷、無私的奉獻(xiàn)精神,共同推動(dòng)軟件產(chǎn)業(yè)的發(fā)展,為我國的社會主義現(xiàn)代化建設(shè)貢獻(xiàn)力量。1.4MyBatis的功能架構(gòu)MyBatis是一款優(yōu)秀的持久層框架,它支持自定義SQL、存儲過程以及高級映射。MyBatis免除了幾乎所有的JDBC代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作。MyBatis可以通過簡單的XML或注解來配置和映射原始類型、接口和POJO為數(shù)據(jù)庫中的記錄。1.4MyBatis的功能架構(gòu)1.4MyBatis的功能架構(gòu)接口層:主要就是和數(shù)據(jù)庫交互,提供給外部使用的接口API,開發(fā)人員通過這些本地API來操縱數(shù)據(jù)庫,接口層一接收到調(diào)用請求就會調(diào)用數(shù)據(jù)處理層來完成具體的數(shù)據(jù)處理。數(shù)據(jù)處理層:是MyBatis的核心,負(fù)責(zé)具體的SQL查找、SQL解析、SQL執(zhí)行和執(zhí)行結(jié)果映射處理等,它主要的目的是根據(jù)調(diào)用的請求完成一次數(shù)據(jù)庫操作。主要完成兩個(gè)功能:①通過傳入?yún)?shù)構(gòu)建動(dòng)態(tài)SQL語句;②SQL語句的執(zhí)行以及封裝查詢結(jié)果集?;A(chǔ)支撐層:基礎(chǔ)支撐層是整個(gè)MyBatis框架的地基,負(fù)責(zé)最基礎(chǔ)的功能支撐,包括連接管理、事務(wù)管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來作為最基礎(chǔ)的組件,為上層的數(shù)據(jù)處理層提供最基礎(chǔ)的支撐。1.5MyBatis的工作流程在理解了Mybatis的功能架構(gòu)之后,接下來我們探討一下Mybatis的工作流程,這也是后面我們使用Mybatis框架的基礎(chǔ)。1.5MyBatis的工作流程1.5MyBatis的工作流程Mybatis框架也是采用工程模式進(jìn)行對象的創(chuàng)建與管理的,其核心對象為SqlSessionFactory,每一步流程的詳細(xì)說明如下文所述:(1)讀取MyBatis的配置文件。mybatis-config.xml為MyBatis的全局配置文件,用于配置數(shù)據(jù)庫連接信息。(2)加載映射文件。映射文件即SQL映射文件,該文件中配置了操作數(shù)據(jù)庫的SQL語句,需要在MyBatis配置文件mybatis-config.xml中加載。mybatis-config.xml文件可以加載多個(gè)映射文件,每個(gè)文件對應(yīng)數(shù)據(jù)庫中的一張表。1.5MyBatis的工作流程(3)構(gòu)造會話工廠。通過MyBatis的環(huán)境配置信息構(gòu)建會話工廠SqlSessionFactory。(4)創(chuàng)建會話對象。由會話工廠創(chuàng)建SqlSession對象,該對象中包含了執(zhí)行SQL語句的所有方法。(5)Executor執(zhí)行器。MyBatis底層定義了一個(gè)Executor接口來操作數(shù)據(jù)庫,它將根據(jù)SqlSession傳遞的參數(shù)動(dòng)態(tài)地生成需要執(zhí)行的SQL語句,同時(shí)負(fù)責(zé)查詢緩存的維護(hù)。(6)MappedStatement對象。在Executor接口的執(zhí)行方法中有一個(gè)MappedStatement類型的參數(shù),該參數(shù)是對映射信息的封裝,用于存儲要映射的SQL語句的id、參數(shù)等信息。1.5MyBatis的工作流程(7)輸入?yún)?shù)映射。輸入?yún)?shù)類型可以是Map、List等集合類型,也可以是基本數(shù)據(jù)類型和POJO類型。輸入?yún)?shù)映射過程類似于JDBC對preparedStatement對象設(shè)置參數(shù)的過程。(8)輸出結(jié)果映射。輸出結(jié)果類型可以是Map、List等集合類型,也可以是基本數(shù)據(jù)類型和POJO類型。輸出結(jié)果映射過程類似于JDBC對結(jié)果集的解析過程。1.6MyBatis下載與使用由于Mybatis是由第三方機(jī)構(gòu)負(fù)責(zé)升級維護(hù)的開源框架,沒有在IDE工具中集成,所以需要開發(fā)者手動(dòng)下載jar包。1.6MyBatis下載與使用名稱說明asm-7.1.jar操作Java字節(jié)碼的類庫cglib-3.3.0.jar用來動(dòng)態(tài)繼承Java類或?qū)崿F(xiàn)接口commons-logging-1.2.jar用于通用日志處理javassist-3.27.0-GA.jar分析、編碼和創(chuàng)建Java類庫log4j-api-2.13.3.jarlog4j到log4j2的橋接包ognl-3.3.4.jar支持ognl表達(dá)式的解析reload4j-1.2.24.jar一個(gè)更強(qiáng)大的日志管理器,目的是為了解決log4j中的漏洞slf4j-api-2.0.6.jar提供日志接口并提供獲取具體日志對象的方法lib文件夾存放了MyBatis運(yùn)行依賴的jar包,一共包括8個(gè)jar文件,每個(gè)jar的具體作用見表9-2的說明。mybatis-3.5.13.jar是MyBatis的核心類庫,mybatis-3.5.13.pdf是MyBatis的參考文檔,介紹了MyBatis的簡單使用說明和案例,在項(xiàng)目開發(fā)中,導(dǎo)入mybatis-3.5.13.jar包和其依賴的另外8個(gè)jar即可。MyBatis重要API簡介本節(jié)將對MyBatis的重要API接口進(jìn)行重點(diǎn)講解。1.ResourcesResources是MyBatis的加載資源的工具類,位于org.apache.ibatis.io.Resources包中,其核心方法是getResourceAsStream(StringfileName),用于通過類加載器返回指定資源的字節(jié)輸入流,返回值類型為InputStream。2MyBatis重要API簡介本節(jié)將對MyBatis的重要API接口進(jìn)行重點(diǎn)講解。2.SqlSessionFactorySqlSessionFactory對象是由SqlSessionFactoryBuilder對象創(chuàng)建的,SqlSessionFactoryBuilder對象通過調(diào)用build()方法創(chuàng)建SqlSessionFactory對象2MyBatis重要API簡介本節(jié)將對MyBatis的重要API接口進(jìn)行重點(diǎn)講解。3.SqlSessionSqlSession對象是MyBatis應(yīng)用中的核心對象,類似于JDBC編程中的Connection對象,其首要作用是執(zhí)行持久化操作,具有強(qiáng)大功能,在軟件開發(fā)中最為常見、使用頻率也最高。2MyBatis的配置文件配置文件對MyBatis的整個(gè)運(yùn)行體系產(chǎn)生影響,它包含了很多控制MyBatis功能的重要信息,是MyBatis實(shí)現(xiàn)功能的重要保證。在開發(fā)過程中,當(dāng)需要更改MyBatis的配置信息時(shí),只需要更改配置文件中的相關(guān)元素及屬性即可,具有良好的可擴(kuò)展性。3MyBatis的配置文件33.1properties元素<properties>用于配置屬性的元素,MyBatis支持<properties>元素的兩種配置方式:properties文件和<property>子元素。1.properties文件properties元素可以通過resource屬性指定外部properties文件,代碼如下:<propertiesresource="mybatisDemo/resources/perties"/>2.property子元素配置<properties>元素通過其子元素<property>完成屬性傳遞,例如:通過properties子元素property配置username和password變量,代碼如下:<properties><propertyname="username"value="root"/><propertyname="password"value="root"/></properties>3.2settings元素settings元素用于配置MyBatis的運(yùn)行時(shí)行為,它能深刻的影響MyBatis的底層運(yùn)行,一般不需要大量配置,大部分情況下使用其默認(rèn)值即可。3.3typeAliases元素由于類的完全限定名比較長,為了簡化開發(fā)、降低代碼的繁瑣度,MyBatis支持使用別名。別名就是為類設(shè)置一個(gè)簡短的名稱,方便開發(fā)人員代碼編寫。別名的設(shè)置一般通過配置文件中的<typeAliases>元素進(jìn)行,具體代碼如下:<typeAliases><typeAliasalias="Student"type="com.exmple.model.Student"/></typeAliases>如果需要對同一個(gè)包下的多個(gè)類定義別名,則可以定義為:<typeAliases><packagename="com.exmple.model"/></typeAliases>3.4typeHandlers元素在程序運(yùn)行過程中,當(dāng)MyBatis為SQL語句設(shè)置參數(shù)或者從結(jié)果集中取值值,都需要進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換,而這些工作都由typeHandler來完成。typeHandler,即類型轉(zhuǎn)換器,它的核心功能是根據(jù)程序運(yùn)行需要將Java語言中的各種基本數(shù)據(jù)類型轉(zhuǎn)換成數(shù)據(jù)庫語言支持的JDBC類型,或者由JDBC類型轉(zhuǎn)換為Java的數(shù)據(jù)類型。在MyBatis內(nèi)部定義了一系列的typeHandler,滿足軟件開發(fā)的基本需要,例如:BoolTypeHandler能夠完成Boolean類型的雙向轉(zhuǎn)換、LongTypeHandler能夠完成Long類型的雙向轉(zhuǎn)換、ByteTypeHandler能夠完成Byte類型的雙向轉(zhuǎn)換,這些typeHandler無需顯示聲明,MyBatis會自動(dòng)探測數(shù)據(jù)類型并完成轉(zhuǎn)換。3.5objectFactory元素MyBatis通過ObjectFactory(對象工廠)創(chuàng)建結(jié)果集對象,在默認(rèn)情況下,MyBatis通過其定義的DefaultObjectFactory類完成相關(guān)的工作。但是,在實(shí)際開發(fā)中,當(dāng)需要干預(yù)結(jié)果集對象的創(chuàng)建過程時(shí),就需要自定義ObjectFactory。MyBatis支持自定義ObjectFactory,自定義ObjectFactory分為兩個(gè)環(huán)節(jié):首先要編寫ObjectFactory類,其次要完成配置。自定義的ObjectFactory類通常要實(shí)現(xiàn)ObjectFactory接口或繼承DefaultObjectFactory類,編寫完ObjectFactory類之后,要將該ObjectFactory類配置到MyBatis的配置文件中。MyBatis通過<ObjectFactory>元素配置<ObjectFactory>,具體示例代碼如下。<objectFactorytype="com.exmple.factory.MyObjectFactory"/>3.6environments元素MyBatis支持多種環(huán)境,使用不同的環(huán)境可以操作不同的數(shù)據(jù)庫,并且MyBatis可以將相同的SQL映射應(yīng)用到多種數(shù)據(jù)庫。通過修改運(yùn)行環(huán)境,MyBatis能夠匹配數(shù)據(jù)庫的常見需求,例如:開發(fā)環(huán)境、測試環(huán)境、運(yùn)行環(huán)境之間的隨意切換,讓多個(gè)數(shù)據(jù)庫使用相同的SQL映射。environment是environments的子元素,用來配置MyBatis的一套運(yùn)行環(huán)境,需指定運(yùn)行環(huán)境ID、事務(wù)管理、數(shù)據(jù)源配置等相關(guān)信息。3.6environments元素1.transactionManager元素MyBatis支持兩種事務(wù)管理器類型,即JDBC類型和MANAGED類型。如果使用JDBC類型的事務(wù)管理器,則應(yīng)用程序服務(wù)器負(fù)責(zé)事務(wù)管理操作,例如事務(wù)提交、事務(wù)回滾等。如果使用MANAGED類型的事務(wù)管理器,則應(yīng)用程序服務(wù)器僅負(fù)責(zé)管理連接生命周期,事務(wù)的管理由MyBatis負(fù)責(zé)。3.6environments元素2.dataSource元素用于配置數(shù)據(jù)庫的連接屬性,例如要連接的數(shù)據(jù)庫的驅(qū)動(dòng)程序名稱、URL地址、用戶名和密碼等。dataSource中的type屬性用于指定數(shù)據(jù)源類型,有以下3種類型。(1)UNPOOLED(2)POOLED(3)JNDI(JavaNamingandDirectoryInterface)3.7mappers元素在MyBatis的配置文件中,mappers元素用于引入配置文件。mapper是mappers的子元素,mapper中的resource屬性用于指定SQL映射文件的路徑(類資源路徑),每個(gè)mapper元素用于引入一個(gè)映射文件,在一個(gè)應(yīng)用當(dāng)中可以編寫多個(gè)映射文件(映射文件的編寫下一章將詳細(xì)介紹)。代碼如下所示。<mappers><mapperresource="com/example/mapper/Student.xml"/><mapperresource="com/example/mapper/Course.xml"/><mapperresource="com/example/mapper/Grade.xml"/></mappers>第一個(gè)MyBatis應(yīng)用程序本節(jié)將結(jié)合“駕校學(xué)員信息管理系統(tǒng)”中的“學(xué)員信息”管理作為入門案例來講解MyBatis框架的基本使用。44.1搭建開發(fā)運(yùn)行環(huán)境1.新建工程導(dǎo)入架包4.1搭建開發(fā)運(yùn)行環(huán)境2.數(shù)據(jù)準(zhǔn)備DROPDATABASEIFEXISTSdriverschooldb;CREATEDATABASEdriverschooldb;USEdriverschooldb;DROPTABLEIFEXISTSt_student;CREATETABLEt_student(stu_idi
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 機(jī)場航站樓鋼結(jié)構(gòu)施工合同范本
- 金屬加工設(shè)備租賃協(xié)議
- 教育用地租賃解除通知
- 五常法在供應(yīng)鏈管理中的應(yīng)用
- 信息技術(shù)溝通規(guī)范
- 港口碼頭場平施工合同
- 船舶專用泵房工程合同
- 造紙機(jī)械融資租賃合同
- ?;穫}庫防雷設(shè)施建設(shè)
- 機(jī)動(dòng)庫護(hù)士培訓(xùn)課件
- 客情關(guān)系的有效維護(hù)
- 《班主任工作》教學(xué)大綱
- 新版出口報(bào)關(guān)單模板
- 生物研究性學(xué)習(xí)活動(dòng)結(jié)題報(bào)告質(zhì)壁分離
- 堡坎承包合同
- 個(gè)人客戶貸后檢查表
- 北京市西城區(qū)師范學(xué)校附屬小學(xué)北師大版數(shù)學(xué)六年級上冊期末試題測試題及答案
- 杭州工地?cái)?shù)字化施工方案
- 騰訊云大數(shù)據(jù)云平臺TBDS 產(chǎn)品白皮書
- 網(wǎng)球國家二級裁判培訓(xùn)講座
評論
0/150
提交評論