Java EE輕量級(jí)框架應(yīng)用實(shí)戰(zhàn)-SSM框架(Spring MVC+Spring+MyBatis)(第2版)課件 第1-6章 初識(shí)MyBatis-初識(shí)Spring_第1頁(yè)
Java EE輕量級(jí)框架應(yīng)用實(shí)戰(zhàn)-SSM框架(Spring MVC+Spring+MyBatis)(第2版)課件 第1-6章 初識(shí)MyBatis-初識(shí)Spring_第2頁(yè)
Java EE輕量級(jí)框架應(yīng)用實(shí)戰(zhàn)-SSM框架(Spring MVC+Spring+MyBatis)(第2版)課件 第1-6章 初識(shí)MyBatis-初識(shí)Spring_第3頁(yè)
Java EE輕量級(jí)框架應(yīng)用實(shí)戰(zhàn)-SSM框架(Spring MVC+Spring+MyBatis)(第2版)課件 第1-6章 初識(shí)MyBatis-初識(shí)Spring_第4頁(yè)
Java EE輕量級(jí)框架應(yīng)用實(shí)戰(zhàn)-SSM框架(Spring MVC+Spring+MyBatis)(第2版)課件 第1-6章 初識(shí)MyBatis-初識(shí)Spring_第5頁(yè)
已閱讀5頁(yè),還剩394頁(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)介

框架簡(jiǎn)介MyBatis簡(jiǎn)介MyBatis環(huán)境的搭建與入門程序MyBatis的基礎(chǔ)操作MyBatis的工作原理第1章

初識(shí)MyBatis2024/1/29本課程目標(biāo)2學(xué)完本門課程后,你能夠掌握MyBatis、Spring、SpringMVC三大框架技術(shù)搭建SpringMVC+Spring+MyBatis框架,并在此框架上熟練進(jìn)行項(xiàng)目開發(fā)學(xué)習(xí)方法3方法查看框架官方文檔和源碼多動(dòng)手多思考學(xué)習(xí)目標(biāo)/Target4了解框架的概念和優(yōu)點(diǎn)了解MyBatis框架的概念和優(yōu)點(diǎn)掌握MyBatis環(huán)境搭建掌握MyBatis入門程序的編寫熟悉MyBatis工作原理章節(jié)概述/Summary5

實(shí)際開發(fā)中,隨著業(yè)務(wù)的發(fā)展,軟件系統(tǒng)變得越來(lái)越復(fù)雜,如果所有的軟件都從底層功能開始開發(fā),那將是一個(gè)漫長(zhǎng)而繁瑣的過(guò)程。此外,團(tuán)隊(duì)協(xié)作開發(fā)時(shí),由于沒(méi)有統(tǒng)一的調(diào)用規(guī)范,系統(tǒng)會(huì)出現(xiàn)大量的重復(fù)功能的代碼,給系統(tǒng)的二次開發(fā)和維護(hù)帶來(lái)不便。為解決上述問(wèn)題,框架應(yīng)運(yùn)而生??蚣軐?shí)現(xiàn)了很多基礎(chǔ)性的功能,開發(fā)人員不需要關(guān)心底層功能操作,只需要專心地實(shí)現(xiàn)所需要的業(yè)務(wù)邏輯,大大提高了開發(fā)人員的工作效率。當(dāng)前市場(chǎng)上的Java

EE開發(fā)主流框架有Spring、SpringMVC和Mybatis等,本章主要對(duì)框架的概念以及Mybatis的基礎(chǔ)知識(shí)進(jìn)行介紹。目錄/CONTENTS框架簡(jiǎn)介MyBatis的基礎(chǔ)操作MyBatis環(huán)境的搭建與入門程序MyBatis簡(jiǎn)介6MyBatis的工作原理14325框架簡(jiǎn)介01第1章初識(shí)MyBatis為什么需要框架技術(shù)8如何更快更好完成某主題PPT?使用PPT模板思考使用模板有什么好處呢?不用考慮布局、排版等,提高效率可專心在內(nèi)容上結(jié)構(gòu)統(tǒng)一,便于閱讀新手也可以作出專業(yè)的PPT提問(wèn)問(wèn)題

“框架(Framework)”一詞最早出現(xiàn)在建筑領(lǐng)域,指的是在建造房屋前期構(gòu)建的建筑骨架。在編程領(lǐng)域,框架就是應(yīng)用程序的骨架,開發(fā)人員可以在這個(gè)骨架上加入自己的東西,搭建出符合自己需求的應(yīng)用系統(tǒng)。什么是框架框架的概念9軟件框架

軟件框架是一種通用的、可復(fù)用的軟件環(huán)境,它提供特定的功能,促進(jìn)軟件應(yīng)用、產(chǎn)品和解決方案的開發(fā)工作。軟件框架會(huì)包含支撐程序、編譯器、代碼、庫(kù)、工具集以及API,它把所有這些部件匯集在一起,以支持項(xiàng)目或系統(tǒng)的開發(fā)。

軟件框架可以形象地比喻成我們?cè)谏w樓房時(shí),用梁+柱子+承重墻搭建起來(lái)的鋼筋混凝土結(jié)構(gòu)的建筑框架,它是整個(gè)建筑的骨架。而實(shí)現(xiàn)的軟件功能,也就像在這個(gè)建筑框架中所要實(shí)現(xiàn)的不同類型、功能的房子,比如健身房、商場(chǎng)、酒店、飯店等??蚣艿母拍?0框架的概念11框架技術(shù)是一個(gè)應(yīng)用程序的半成品提供可重用的公共結(jié)構(gòu)按一定規(guī)則組織的一組組件分析優(yōu)勢(shì)不用再考慮公共問(wèn)題專心在業(yè)務(wù)實(shí)現(xiàn)上結(jié)構(gòu)統(tǒng)一,易于學(xué)習(xí)、維護(hù)新手也可寫出好程序

在早期Java

EE應(yīng)用開發(fā)中,企業(yè)開發(fā)人員是利用JSP+Servlet技術(shù)進(jìn)行軟件應(yīng)用和系統(tǒng)開發(fā)的,使用該技術(shù)會(huì)有以下兩個(gè)弊端。

(1)軟件應(yīng)用和系統(tǒng)可維護(hù)性差

如果全部采用JSP+Servlet技術(shù)進(jìn)行軟件的開發(fā),因?yàn)榉謱硬粔蚯逦?,業(yè)務(wù)邏輯的實(shí)現(xiàn)無(wú)法單獨(dú)分離出來(lái),從而造成系統(tǒng)后期維護(hù)困難。

(2)代碼重用性低

企業(yè)希望以最快的速度,開發(fā)出最穩(wěn)定、最實(shí)用的軟件。如果系統(tǒng)不使用框架,每次開發(fā)系統(tǒng)都需要重新開發(fā),需要投入大量的人力物力,并且重新開發(fā)的代碼可能具有更多的漏洞,這就增加了系統(tǒng)出錯(cuò)的風(fēng)險(xiǎn)。早起Java

EE開發(fā)弊端

框架的優(yōu)勢(shì)12

相比于使用JSP+Servlet技術(shù)進(jìn)行軟件開發(fā),使用框架有以下優(yōu)勢(shì)。

1.提高開發(fā)效率:如果采用成熟、穩(wěn)健的框架,那么一些通用的基礎(chǔ)工作,如事務(wù)處理、安全性、數(shù)據(jù)流控制等都可以交給框架處理,程序員只需要集中精力完成系統(tǒng)的業(yè)務(wù)邏輯設(shè)計(jì),降低了開發(fā)難度。

2.提高代碼規(guī)范性和可維護(hù)性:當(dāng)多人協(xié)同進(jìn)行開發(fā)時(shí),代碼的規(guī)范性和可維護(hù)性就變得非常重要。成熟的框架都有嚴(yán)格的代碼規(guī)范,能保證團(tuán)隊(duì)整體的開發(fā)風(fēng)格統(tǒng)一。

3.提高軟件性能:使用框架進(jìn)行軟件開發(fā),可以減少程序中的冗余代碼。例如,使用Spring框架開發(fā)時(shí),通過(guò)Spring的IOC特性,可以將對(duì)象之間的依賴關(guān)系交給Spring控制,方便解耦,簡(jiǎn)化開發(fā);使用MyBatis框架開發(fā)時(shí),MyBatis提供了XML標(biāo)簽,支持動(dòng)態(tài)的SQL,開發(fā)人員無(wú)需在類中編寫大量的SQL語(yǔ)句,只需要在配置文件中進(jìn)行配置即可??蚣軆?yōu)勢(shì)框架的優(yōu)勢(shì)13

Spring是一個(gè)開源框架,是為了解決企業(yè)應(yīng)用程序開發(fā)復(fù)雜性而創(chuàng)建的,其主要優(yōu)勢(shì)之一就是分層架構(gòu)。Spring提供了更完善的開發(fā)環(huán)境,可以為POJO(PlainOrdinaryJavaObject,普通Java對(duì)象)對(duì)象提供企業(yè)級(jí)的服務(wù)。Spring框架當(dāng)前主流框架14

SpringMVC是一個(gè)Web開發(fā)框架,可以將它理解為Servlet。在MVC模式中,SpringMVC作為控制器(Controller)用于實(shí)現(xiàn)模型與視圖的數(shù)據(jù)交互,是結(jié)構(gòu)最清晰的。

SpringMVC框架采用松耦合、可插拔的組件結(jié)構(gòu),具有高度可配置性,與其他的MVC框架相比,具有更強(qiáng)的擴(kuò)展性和靈活性。SpringMVC框架當(dāng)前主流框架15

MyBatis是Apache的一個(gè)開源項(xiàng)目iBatis,2010年這個(gè)項(xiàng)目由ApacheSoftwareFoundation遷移到了GoogleCode,并且改名為MyBatis,2013年11月MyBatis又被遷移到Github。MyBatis是一個(gè)優(yōu)秀的持久層框架,它可以在實(shí)體類和SQL語(yǔ)句之間建立映射關(guān)系,是一種半自動(dòng)化的ORM(Object/RelationMapping,即對(duì)象關(guān)系映射)實(shí)現(xiàn)。MyBatis封裝性要低于Hibernate,但它性能優(yōu)越、簡(jiǎn)單易學(xué),在互聯(lián)網(wǎng)應(yīng)用的開發(fā)中被廣泛使用。

上述介紹的Struts2、Hibernate、Spring、SpringMVC和MyBatis等都是Java

EE開發(fā)中最常見(jiàn)的框架,它們能極大地提高JavaEE應(yīng)用的開發(fā)效率,并能保證應(yīng)用具有穩(wěn)定的性能,得到了開發(fā)者廣泛地支持。MyBatis框架當(dāng)前主流框架16

Hibernate

是一個(gè)優(yōu)秀的持久層框架,它可以在Java對(duì)象與關(guān)系型數(shù)據(jù)庫(kù)之間建立某種映射,以實(shí)現(xiàn)Java對(duì)象的直接存取。

使用JDBC連接來(lái)讀寫數(shù)據(jù)庫(kù),過(guò)程繁瑣。Hibernate框架通過(guò)簡(jiǎn)單配置和編碼即可替代JDBC繁瑣的程序代碼。Hibernate已經(jīng)成為當(dāng)前主流的數(shù)據(jù)庫(kù)持久層框架,被廣泛應(yīng)用在企業(yè)開發(fā)中。Hibernate框架

當(dāng)前主流框架17SpringBoot框架是Pivotal團(tuán)隊(duì)基于Spring開發(fā)的全新框架,其設(shè)計(jì)初衷是為了簡(jiǎn)化Spring的配置,使用戶能夠構(gòu)建獨(dú)立運(yùn)行的程序,提高開發(fā)效率。SpringBoot框架本身并不提供Spring框架的核心特性及擴(kuò)展功能,它只是用于快速、敏捷地開發(fā)新一代基于Spring框架的應(yīng)用,同時(shí)它還集成了大量的第三方類庫(kù)(如Jackson、JDBC、Redis等),使用戶只需少量配置就能完成相應(yīng)功能。SpringBoot框架

當(dāng)前主流框架18SpringCloud是一系列框架的有序集合,為開發(fā)人員構(gòu)建微服務(wù)架構(gòu)提供了完整的解決方案,它利用SpringBoot的開發(fā)便利性巧妙地簡(jiǎn)化了分布式系統(tǒng)的開發(fā)。例如,配置管理、服務(wù)發(fā)現(xiàn)、控制總線等操作,都可以使用SpringBoot做到一鍵啟動(dòng)和部署??梢哉f(shuō),SpringCloud將SpringBoot框架進(jìn)行了再封裝,屏蔽掉了復(fù)雜的配置和實(shí)現(xiàn)原理,具有簡(jiǎn)單易懂、易部署和易維護(hù)等特點(diǎn)。SpringCloud框架

當(dāng)前主流框架19MyBatis簡(jiǎn)介02第1章初識(shí)MyBatis數(shù)據(jù)持久化概念21持久化是程序數(shù)據(jù)在瞬時(shí)狀態(tài)和持久狀態(tài)間轉(zhuǎn)換的過(guò)程內(nèi)存姓名:小穎性別:女特長(zhǎng):英語(yǔ)JDBC…Stmt.execute("…")…持久狀態(tài)JDBC的劣勢(shì)

JDBC是Java程序?qū)崿F(xiàn)數(shù)據(jù)訪問(wèn)的基礎(chǔ),JDBC的劣勢(shì)主要有以下幾個(gè)方面。(1)數(shù)據(jù)庫(kù)連接創(chuàng)建、釋放頻繁會(huì)造成系統(tǒng)資源浪費(fèi),從而影響系統(tǒng)性能。(2)

SQL語(yǔ)句在代碼中硬編碼,造成代碼不易維護(hù)。在實(shí)際應(yīng)用的開發(fā)中,SQL變化的可能性較大。在傳統(tǒng)JDBC編程中,SQL變動(dòng)需要改變Java代碼,違反了開閉原則。(3)用PreparedStatement向占有位符號(hào)傳參數(shù)存在硬編碼,因?yàn)镾QL語(yǔ)句的where條件不一定,可能多也可能少,修改SQL需要修改代碼,造成系統(tǒng)不易維護(hù)。(4)JDBC對(duì)結(jié)果集解析存在硬編碼(查詢列名),SQL變化導(dǎo)致解析代碼變化,造成系統(tǒng)不易維護(hù)。

傳統(tǒng)JDBC的劣勢(shì)22ORM框架23ORM(ObjectRelationalMapping)編寫程序的時(shí)候,以面向?qū)ο蟮姆绞教幚頂?shù)據(jù)保存數(shù)據(jù)的時(shí)候,卻以關(guān)系型數(shù)據(jù)庫(kù)的方式存儲(chǔ)ORM解決方案包含下面四個(gè)部分在持久化對(duì)象上執(zhí)行基本的增、刪、改、查操作對(duì)持久化對(duì)象提供一種查詢語(yǔ)言或者API對(duì)象關(guān)系映射工具提供與事務(wù)對(duì)象交互、執(zhí)行檢查、延遲加載以及其他優(yōu)化功能

屬性字段nameuser_namesexuser_Sexskilluser_skillUser對(duì)象name:小穎sex:女skill:英語(yǔ)、程序設(shè)計(jì)對(duì)象-關(guān)系映射什么是MyBatis

MyBatis是一個(gè)支持普通SQL查詢、存儲(chǔ)過(guò)程以及高級(jí)映射的持久層框架,它消除了幾乎所有的JDBC代碼和參數(shù)的手動(dòng)設(shè)置以及對(duì)結(jié)果集的檢索,使用簡(jiǎn)單的XML或注解進(jìn)行配置和原始映射,將接口和Java的POJO映射成數(shù)據(jù)庫(kù)中的記錄,使得Java開發(fā)人員可以使用面向?qū)ο蟮木幊趟枷雭?lái)操作數(shù)據(jù)庫(kù)。MyBatis概述24MyBatis簡(jiǎn)介25MyBatis前身是iBatis,本是Apache的一個(gè)開源的項(xiàng)目官方網(wǎng)站ORM框架實(shí)體類和SQL語(yǔ)句之間建立映射關(guān)系特點(diǎn)基于SQL語(yǔ)法,簡(jiǎn)單易學(xué)能了解底層封裝過(guò)程SQL語(yǔ)句封裝在配置文件中,便于統(tǒng)一管理與維護(hù),降低程序的耦合度方便程序代碼調(diào)試什么是MyBatis26MyBatis框架也被稱之為ORM(Object/RelationMapping,即對(duì)象關(guān)系映射)框架。所謂的ORM就是一種為了解決面向?qū)ο笈c關(guān)系型數(shù)據(jù)庫(kù)中數(shù)據(jù)類型不匹配的技術(shù),它通過(guò)描述Java對(duì)象與數(shù)據(jù)庫(kù)表之間的映射關(guān)系,自動(dòng)將Java應(yīng)用程序中的對(duì)象持久化到關(guān)系型數(shù)據(jù)庫(kù)的表中。ORM框架的工作原理解決JDBC編程劣勢(shì)

針對(duì)前面提到的JDBC編程的劣勢(shì),MyBatis提供了以下解決方案,具體如下。

問(wèn)題一:數(shù)據(jù)庫(kù)鏈接創(chuàng)建、釋放頻繁會(huì)造成系統(tǒng)資源浪費(fèi),從而影響系統(tǒng)性能。

解決方案:在SqlMapConfig.xml中配置數(shù)據(jù)鏈接池,使用連接池管理數(shù)據(jù)庫(kù)鏈接。

問(wèn)題二:SQL語(yǔ)句在代碼中硬編碼,造成代碼不易維護(hù)。在實(shí)際應(yīng)用的開發(fā)中,SQL變化的可能較大。在傳統(tǒng)JDBC編程中,SQL變動(dòng)需要改變Java代碼,違反了開閉原則。

解決方案:MyBatis將SQL語(yǔ)句配置在MyBatis的映射文件中,實(shí)現(xiàn)了與Java代碼的分離。MyBatis概述27解決JDBC編程劣勢(shì)

問(wèn)題三:使用preparedStatement向占有位符號(hào)傳參數(shù)存在硬編碼,因?yàn)镾QL語(yǔ)句的where條件不一定,可能多也可能少,修改SQL需要修改代碼,造成系統(tǒng)不易維護(hù)。

解決方案:MyBatis自動(dòng)將Java對(duì)象映射至SQL語(yǔ)句,通過(guò)Statement中的parameterType定義輸入?yún)?shù)的類型。

問(wèn)題四:JDBC對(duì)結(jié)果集解析存在硬編碼(查詢列名),SQL變化導(dǎo)致解析代碼變化,造成系統(tǒng)不易維護(hù)。

解決方案:MyBatis自動(dòng)將SQL執(zhí)行結(jié)果映射至Java對(duì)象,通過(guò)Statement中的resultType定義輸出結(jié)果的類型。MyBatis概述28與Hibernate直觀對(duì)比29HibernateHibernate是一個(gè)全表映射的框架。通常開發(fā)者只需定義好持久化對(duì)象到數(shù)據(jù)庫(kù)表的映射關(guān)系,就可以通過(guò)Hibernate提供的方法完成持久層操作。開發(fā)者并不需要熟練的掌握SQL語(yǔ)句的編寫,Hibernate會(huì)根據(jù)制定的存儲(chǔ)邏輯,自動(dòng)的生成對(duì)應(yīng)的SQL,并調(diào)用JDBC接口來(lái)執(zhí)行,所以其開發(fā)效率會(huì)高于MyBatis。Hibernate也存在一些缺點(diǎn),例如它在多表關(guān)聯(lián)時(shí),對(duì)SQL查詢的支持較差;更新數(shù)據(jù)時(shí),需要發(fā)送所有字段;不支持存儲(chǔ)過(guò)程;不能通過(guò)優(yōu)化SQL來(lái)優(yōu)化性能等。MyBatisMyBatis是一個(gè)半自動(dòng)映射的框架?!鞍胱詣?dòng)”是相對(duì)于Hibernate全表映射而言的,MyBatis需要手動(dòng)匹配提供POJO、SQL和映射關(guān)系,而Hibernate只需提供POJO和映射關(guān)系即可。與Hibernate相比,雖然使用MyBatis手動(dòng)編寫SQL要比使用Hibernate的工作量大,但MyBatis可以配置動(dòng)態(tài)SQL并優(yōu)化SQL,可以通過(guò)配置決定SQL的映射規(guī)則,它還支持存儲(chǔ)過(guò)程等。對(duì)于一些復(fù)雜的和需要優(yōu)化性能的項(xiàng)目來(lái)說(shuō),顯然使用MyBatis更加合適。Hibernate與MyBatis有什么區(qū)別?MyBatis環(huán)境的搭建

與入門程序03第1章初識(shí)MyBatis百貨中心供應(yīng)鏈管理系統(tǒng)介紹2-131總體功能模塊百貨中心供應(yīng)鏈管理系統(tǒng)用戶登錄用戶登錄登錄驗(yàn)證用戶退出用戶管理查詢用戶搜索條件查詢分頁(yè)査詢添加用戶修改用戶刪除用戶用戶權(quán)限管理添加用戶權(quán)限修改用戶權(quán)限刪除用戶權(quán)限供應(yīng)商管理查詢供應(yīng)商搜索條件查詢分頁(yè)査詢添加供應(yīng)商修改供應(yīng)商刪除供應(yīng)商商品管理查詢商品搜索條件查詢分頁(yè)査詢添加商品修改商品刪除商品商品類別管理查詢商品類別添加商品類別刪除商品類別采購(gòu)訂單管理查詢采購(gòu)訂單搜索條件查詢分頁(yè)査詢添加采購(gòu)訂單修改采購(gòu)訂單刪除采購(gòu)訂單銷售訂單管理查詢銷售訂單搜索條件查詢分頁(yè)査詢新聞管理查詢新聞搜索條件查詢分頁(yè)査詢添加新聞修改新聞刪除新聞演示:課堂貫穿案例(百貨中心供應(yīng)鏈管理系統(tǒng))百貨中心供應(yīng)鏈管理系統(tǒng)介紹2-232數(shù)據(jù)庫(kù)設(shè)計(jì)表用戶表(表名:tb_user)用戶權(quán)限表(表名:tb_role)供應(yīng)商表(表名:tb_provider)商品類別表(表名:tb_product_category)商品表(表名:tb_product)采購(gòu)訂單表(表名:tb_bill)銷售訂單表(表名:tb_order)銷售訂單關(guān)聯(lián)表(表名:tb_order_detail)新聞表(表名:tb_news)邏輯外鍵關(guān)聯(lián)演示:數(shù)據(jù)庫(kù)表結(jié)構(gòu)MyBatis環(huán)境搭建的步驟

使用MyBatis框架進(jìn)行數(shù)據(jù)庫(kù)開發(fā)之前,需要先搭建MyBatis環(huán)境,MyBatis環(huán)境搭建主要有如下基本步驟。(1)創(chuàng)建工程;

(2)引入相關(guān)依賴;(3)數(shù)據(jù)庫(kù)準(zhǔn)備;(4)編寫數(shù)據(jù)庫(kù)連接信息配置文件;(5)編寫核心配置文件和映射文件。MyBatis環(huán)境搭建33創(chuàng)建工程:(1)啟動(dòng)IntelliJIDEA開發(fā)工具,單擊工具欄中的File→new→Project選項(xiàng),彈出NewProject對(duì)話框。MyBatis環(huán)境搭建34STEP01創(chuàng)建工程:(2)在NewProject對(duì)話框中,單擊左側(cè)菜單中的“Maven”選項(xiàng),然后單擊“Next”按鈕,進(jìn)入項(xiàng)目命名對(duì)話框。MyBatis環(huán)境搭建35STEP01創(chuàng)建工程:(3)在“Name”文本框中對(duì)Maven項(xiàng)目命名,在“Location”文本框選擇項(xiàng)目存放的路徑。單擊“ArtifactCoordinates”選項(xiàng)可以填寫GroupId、ArtifactId和Version。其中GroupId通常設(shè)置為公司倒置的網(wǎng)絡(luò)域名,如“cn.dsscm”;ArtifactId通常設(shè)置為項(xiàng)目名;Version使用IDEA默認(rèn)版本即可。填寫完成之后單擊“Finish”按鈕完成項(xiàng)目創(chuàng)建。MyBatis環(huán)境搭建36STEP01引入相關(guān)依賴:由于本項(xiàng)目要連接數(shù)據(jù)庫(kù)以及對(duì)程序進(jìn)行測(cè)試,所以需要在項(xiàng)目的pom.xml文件中導(dǎo)入MySQL驅(qū)動(dòng)包、Junit測(cè)試包、MyBatis的核心包等相關(guān)依賴。MyBatis環(huán)境搭建37STEP02<dependencies><dependency>

<groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.11</version></dependency>……</dependencies><build><resources><resource>

<directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build>首次引依賴需要聯(lián)網(wǎng)IDEA默認(rèn)集成的Maven,所以在第一次引入依賴時(shí),需要在聯(lián)網(wǎng)狀態(tài)下進(jìn)行,且引入依賴需要較長(zhǎng)時(shí)間,耐心等待到依賴引入完成即可。

MyBatis環(huán)境搭建38創(chuàng)建數(shù)據(jù)庫(kù):在MySQL中導(dǎo)入名稱為“dsscm.sql”素材文件,創(chuàng)建一個(gè)名稱為dsscm的數(shù)據(jù)庫(kù)。MyBatis環(huán)境搭建39STEP03創(chuàng)建數(shù)據(jù)庫(kù)連接信息配置文件:在項(xiàng)目的src/main/resources目錄下創(chuàng)建數(shù)據(jù)庫(kù)連接的配置文件,這里將其命名為perties,在該文件中配置數(shù)據(jù)庫(kù)連接的參數(shù)。MyBatis環(huán)境搭建40STEP04driver=com.mysql.cj.jdbc.Driverurl=jdbc:mysql://localhost:3306/dsscm?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=falseusername=rootpassword=123456創(chuàng)建日志配置文件:在項(xiàng)目的src/main/resources目錄下創(chuàng)建perties文件MyBatis環(huán)境搭建41STEP041. log4j.rootLogger=debug,stdout,R2. 3. log4j.appender.stdout=org.apache.log4j.ConsoleAppender4. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout5. 6. #Patterntooutputthecaller'sfilenameandlinenumber.7. log4j.appender.stdout.layout.ConversionPattern=%5p[%t](%F:%L)-%m%n8. 9. log4j.appender.R=org.apache.log4j.RollingFileAppender10. log4j.appender.R.File=example.log11. 12. log4j.appender.R.MaxFileSize=100KB13. #Keeponebackupfile14. log4j.appender.R.MaxBackupIndex=515. 16. log4j.appender.R.layout=org.apache.log4j.PatternLayout17. log4j.appender.R.layout.ConversionPattern=%p%t%c-%m%nSTEP05創(chuàng)建MyBatis的核心配置文件:在項(xiàng)目的src/main/resources目錄下創(chuàng)建MyBatis的核心配置文件,該文件主要用于項(xiàng)目的環(huán)境配置,如數(shù)據(jù)庫(kù)連接相關(guān)配置等。核心配置文件可以隨意命名,但通常將其命名為mybatis-config.xml。<configuration><propertiesresource="perties"/><environmentsdefault="development"><environmentid="development"><transactionManagertype="JDBC"/><dataSourcetype="POOLED">

<propertyname="driver"value="${mysql.driver}"/><propertyname="url"value="${mysql.url}"/><propertyname="username"value="${mysql.username}"/><propertyname="password"value="${mysql.password}"/></dataSource>

</environment></environments></configuration>MyBatis環(huán)境搭建42共性問(wèn)題集中講解43常見(jiàn)問(wèn)題及解決辦法代碼規(guī)范問(wèn)題調(diào)試技巧共性問(wèn)題集中講解演示案例44查詢用戶表記錄數(shù)

需求說(shuō)明搭建MyBatis開發(fā)環(huán)境,實(shí)現(xiàn)用戶表記錄數(shù)查詢?cè)贗DEA中創(chuàng)建工程,導(dǎo)入MyBatis的jar包創(chuàng)建MyBatis配置文件mybatis-config.xml,配置數(shù)據(jù)庫(kù)信息編寫實(shí)體類User.java編寫SQL映射文件UserMapper.xml編寫測(cè)試類UserMapperTest.java,運(yùn)行輸出結(jié)果分析實(shí)現(xiàn)步驟12345MyBatis的入門程序45創(chuàng)建UserMapper.xml:創(chuàng)建包“cn.dsscm.dao”并在里面配置映射文件,該文件也是一個(gè)XML文件,命名為UserMapper.xmlSTEP01<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-////DTDMapper3.0//EN""/dtd/mybatis-3-mapper.dtd"><mappernamespace="cn.dsscm.dao.UserMapper"> <!--查詢用戶表記錄數(shù)--> <selectid="count"resultType="int"> SELECTcount(1) FROMtb_user </select></mapper>MyBatis的入門程序46創(chuàng)建測(cè)試類:在src/test/java目錄下創(chuàng)建cn.dsscm.test包,在該包下創(chuàng)建UserMapperTest.java進(jìn)行功能測(cè)試。STEP02實(shí)現(xiàn)步驟讀取全局配置文件:mybatis-config.xml創(chuàng)建SqlSessionFactory對(duì)象,此對(duì)象可以完成對(duì)配置文件的讀取創(chuàng)建SqlSession對(duì)象,此對(duì)象的作用是調(diào)用mapper文件進(jìn)行數(shù)據(jù)操作關(guān)閉SqlSession對(duì)象@Testpublicvoidtest1(){ //創(chuàng)建SqlSession對(duì)象

SqlSessionsqlSession=null; try{ //獲取mybatis-config.xml的輸入流

InputStreamis=Resources.getResourceAsStream("mybatis-config.xml"); //創(chuàng)建SqlSessionFactory對(duì)象

SqlSessionFactoryfactory=newSqlSessionFactoryBuilder().build(is); intcount=0; //創(chuàng)建sqlSession sqlSession=factory.openSession(); //調(diào)用mapper文件來(lái)對(duì)數(shù)據(jù)進(jìn)行操作,必須先把mapper文件引入到mybatis-config.xml中

count=sqlSession.selectOne("cn.dsscm.dao.UserMapper.count"); logger.debug("UserMapperTestcount>"+count); }catch(IOExceptione){ e.printStackTrace(); }finally{ //關(guān)閉SqlSession對(duì)象

sqlSession.close(); }}共性問(wèn)題集中講解47常見(jiàn)問(wèn)題及解決辦法代碼規(guī)范問(wèn)題調(diào)試技巧共性問(wèn)題集中講解與JDBC直觀對(duì)比48MyBatis將代碼分解包裝對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)源的管理包括事務(wù)管理通過(guò)配置文件,獲取返回結(jié)果到Java對(duì)象的映射通過(guò)配置文件,管理SQL及輸入?yún)?shù)的映射MyBatis框架優(yōu)缺點(diǎn)49優(yōu)點(diǎn)與JDBC相比,減少了50%以上的代碼量最簡(jiǎn)單的持久化框架,小巧并簡(jiǎn)單易學(xué)SQL代碼從程序代碼中徹底分離,可重用提供XML標(biāo)簽,支持編寫動(dòng)態(tài)SQL提供映射標(biāo)簽,支持對(duì)象與數(shù)據(jù)庫(kù)的ORM字段映射缺點(diǎn)SQL語(yǔ)句編寫工作量大,對(duì)開發(fā)人員有一定要求數(shù)據(jù)庫(kù)移植性差MyBatis專注于SQL本身,是一個(gè)足夠靈活的DAO層解決方案,適用于性能要求較高或者需求多變的互聯(lián)網(wǎng)項(xiàng)目!技能訓(xùn)練50查詢供應(yīng)商表記錄數(shù)需求說(shuō)明搭建MyBatis開發(fā)環(huán)境,實(shí)現(xiàn)供應(yīng)商表記錄數(shù)查詢創(chuàng)建Maven工程,導(dǎo)入MyBatis的jar包創(chuàng)建MyBatis配置文件mybatis-config.xml,配置數(shù)據(jù)庫(kù)信息編寫實(shí)體類Provider.java編寫SQL映射文件ProviderMapper.xml編寫測(cè)試類ProviderMapperTest.java,運(yùn)行輸出結(jié)果練習(xí)提示完成時(shí)間:20分鐘共性問(wèn)題集中講解51常見(jiàn)問(wèn)題及解決辦法代碼規(guī)范問(wèn)題調(diào)試技巧共性問(wèn)題集中講解MyBatis

的基礎(chǔ)操作04第1章初識(shí)MyBatis演示案例53查詢用戶

需求說(shuō)明搭建MyBatis開發(fā)環(huán)境,實(shí)現(xiàn)用戶表記錄數(shù)查詢?cè)贗DEA中創(chuàng)建工程,導(dǎo)入MyBatis的jar包創(chuàng)建MyBatis配置文件mybatis-config.xml,配置數(shù)據(jù)庫(kù)信息編寫實(shí)體類User.java編寫SQL映射文件UserMapper.xml編寫測(cè)試類UserMapperTest.java,運(yùn)行輸出結(jié)果分析實(shí)現(xiàn)步驟12345查詢用戶

54根據(jù)用戶編號(hào)查詢用戶信息。1根據(jù)用戶名模糊查詢用戶信息。2

在實(shí)際開發(fā)中,查詢操作通常都會(huì)涉及到單條數(shù)據(jù)的精確查詢,以及多條數(shù)據(jù)的模糊查詢。1.根據(jù)用戶編號(hào)查詢用戶信息查詢用戶

55創(chuàng)建POJO實(shí)體:在項(xiàng)目的src/main/java目錄下創(chuàng)建cn.dsscm.pojo包,在該包下創(chuàng)建User.java類STEP01importjava.util.Date;publicclassUser{ privateIntegerid;//id privateStringuserCode;//用戶編碼

privateStringuserName;//用戶名稱

privateStringuserPassword;//用戶密碼

privateIntegergender;//性別

privateDatebirthday;//出生日期

privateStringphone;//電話

…….

//省略Getter、Setter和toString方法}1.根據(jù)用戶編號(hào)查詢用戶信息查詢用戶

56編輯映射文件UserMapper.xml:在映射文件UserMapper.xml,添加根據(jù)用戶id查詢用戶信息列表的配置STEP021. <?xmlversion="1.0"encoding="UTF-8"?>2. <!DOCTYPEmapperPUBLIC"-////DTDMapper3.0//EN"3. "/dtd/mybatis-3-mapper.dtd">4. 5. <mappernamespace="cn.dsscm.dao.user.UserMapper">6. <!--根據(jù)用戶id查詢用戶信息列表--><selectid="getUserListById"parameterType="Integer"resultType="cn.dsscm.pojo.User">8. SELECT*FROMdsscm_user9. WHEREid=#{id}10. </select>11. </mapper>1.根據(jù)用戶編號(hào)查詢用戶信息查詢用戶

57編輯測(cè)試方法:編輯UserMapperTest.java文件,為其添加根據(jù)用戶ID查詢用戶信息的操作的測(cè)試方法STEP03@TestpublicvoidfindUserByIdTest(){ Useruser=null; SqlSessionsqlSession=null; try{ //1獲取mybatis-config.xml的輸入流

InputStreamis=Resources.getResourceAsStream("mybatis-config.xml";); //2創(chuàng)建SqlSessionFactory對(duì)象,完成對(duì)配置文件的讀取

SqlSessionFactoryfactory=newSqlSessionFactoryBuilder().build(is); //3創(chuàng)建sqlSession sqlSession=factory.openSession(); //4調(diào)用mapper文件來(lái)對(duì)數(shù)據(jù)進(jìn)行操作,必須先把mapper文件引入到mybatis-config.xml中

user=sqlSession.selectOne("cn.dsscm.dao.user.UserMapper.getUserListById",1); logger.debug("UserTestuser>"+user); }catch(IOExceptione){ e.printStackTrace(); }finally{ sqlSession.close(); }}2.根據(jù)用戶名模糊查詢用戶信息查詢用戶

58編輯映射文件UserMapper.xml:在映射文件UserMapper.xml中,添加根據(jù)用戶名模糊查詢信息列表的SQL語(yǔ)句STEP011. <!--根據(jù)用戶名模糊查詢用戶信息列表-->2. <selectid="getUserListByName"parameterType="String"3. resultType="cn.dsscm.pojo.User">4. SELECT*FROMtb_user5. WHEREuserNameLIKE'%${value}%'6. </select>1. <!--根據(jù)用戶名模糊查詢用戶信息列表-->2. <selectid="getUserListByName"parameterType="String"3. resultType="cn.dsscm.pojo.User">4. SELECT*FROMtb_user5. WHEREuserNameLIKEconcat('%',#{value},'%')6. </select>2.根據(jù)用戶名模糊查詢用戶信息查詢用戶

59編輯測(cè)試方法:在測(cè)試類UserMapperTest.java中,添加一個(gè)測(cè)試方法findUserByNameTest()STEP02@TestpublicvoidfindUserByIdTest(){ …… //4調(diào)用mapper文件來(lái)對(duì)數(shù)據(jù)進(jìn)行操作,必須先把mapper文件引入到mybatis-config.xml中

list=sqlSession.selectList("cn.dsscm.dao.user.UserMapper.getUserListByName","張"); logger.debug("UserTestlist>"+list); ……}一個(gè)項(xiàng)目多個(gè)配置文件

如果一個(gè)項(xiàng)目有多個(gè)映射文件,則mybatis-config.xml核心配置文件中需要在<mappers>元素下配置多個(gè)<mapper>元素指定映射文件的路徑。MyBatis的基礎(chǔ)操作60讀取配置文件通過(guò)SqlSessionFactory創(chuàng)建SqlSession根據(jù)配置文件構(gòu)建SqlSessionFactory12

3使用SqlSession對(duì)象操作數(shù)據(jù)庫(kù)4關(guān)閉SqlSession5MyBatis的操作步驟案例總結(jié)查詢用戶61技能訓(xùn)練62實(shí)現(xiàn)供應(yīng)商表的查詢需求說(shuō)明分別實(shí)現(xiàn)按下列條件查詢訂單表,查詢條件如下:全部供應(yīng)商。供應(yīng)商(供應(yīng)商id)。查詢結(jié)果列顯示:供應(yīng)商信息。練習(xí)完成時(shí)間:20分鐘共性問(wèn)題集中講解63常見(jiàn)問(wèn)題及解決辦法代碼規(guī)范問(wèn)題調(diào)試技巧共性問(wèn)題集中講解添加用戶64編輯映射文件UserMapper.xml:添加操作是通過(guò)<insert>元素來(lái)實(shí)現(xiàn)的。例如,向數(shù)據(jù)庫(kù)中的dsscm_user表中插入一條數(shù)據(jù)可以通過(guò)如下配置來(lái)實(shí)現(xiàn)。STEP01<!--增加用戶--><insertid="add"parameterType="cn.dsscm.pojo.User"> insertintodsscm_user(userCode,userName,userPassword,gender, birthday,phone,address,userRole,createdBy,creationDate) values(#{userCode},#{userName},#{userPassword},#{gender},#{birthday}, #{phone},#{address},#{userRole},#{createdBy},#{creationDate})</insert>添加用戶65編輯測(cè)試方法:在測(cè)試類MybatisTest中,添加測(cè)試方法addUserTest()。STEP02 @Test publicvoidfindUserByIdTest(){ …… //4、SqlSession執(zhí)行添加操作

//4.1創(chuàng)建User對(duì)象,并向?qū)ο笾刑砑訑?shù)據(jù)

Useruser=newUser(); user.setUserCode("test001"); user.setUserName("測(cè)試用戶001"); user.setUserPassword("1234567"); …… //4.2執(zhí)行SqlSession的插入方法,返回的是SQL語(yǔ)句影響的行數(shù)

count=sqlSession.insert("cn.dsscm.dao.user.UserMapper.add",user); //4.3通過(guò)返回結(jié)果判斷插入操作是否執(zhí)行成功

if(count>0){ System.out.println("您成功插入了"+count+"條數(shù)據(jù)!"); }else{ System.out.println("執(zhí)行插入操作失?。。?!"); } //4.4提交事務(wù)

sqlSmit(); …… }更新用戶66編輯映射文件UserMapper.xml:在映射文件UserMapper.xml中,更新操作在映射文件中是通過(guò)配置<update>元素來(lái)實(shí)現(xiàn)的。STEP01<!--修改用戶信息--><updateid="modify"parameterType="cn.dsscm.pojo.User"> UPDATEdsscm_user SETuserCode=#{userCode},userName=#{userName}, userPassword=#{userPassword},gender=#{gender},birthday=#{birthday}, phone=#{phone},address=#{address},userRole=#{userRole}, modifyBy=#{modifyBy},modifyDate=#{modifyDate} WHEREid=#{id}</update>更新用戶67編輯測(cè)試方法:在測(cè)試類MybatisTest中,添加測(cè)試方法updateUserTest(),將id為21的信息修改。STEP02//4、SqlSession執(zhí)行添加操作

//4.1創(chuàng)建User對(duì)象,并向?qū)ο笾刑砑訑?shù)據(jù)

Useruser=newUser(); user.setId(21); user.setUserCode("test002"); ……. //4.2執(zhí)行SqlSession的更新方法,返回的是SQL語(yǔ)句影響的行數(shù)

count=sqlSession.update("cn.dsscm.dao.user.UserMapper.modify",user); //4.3通過(guò)返回結(jié)果判斷插入操作是否執(zhí)行成功

if(count>0){ System.out.println("您成功修改了"+count+"條數(shù)據(jù)!"); }else{ System.out.println("執(zhí)行修改操作失敗?。?!"); } //4.4提交事務(wù)

sqlSmit();…….刪除用戶68編輯映射文件UserMapper.xml:刪除操作在映射文件中是通過(guò)配置<delete>元素來(lái)實(shí)現(xiàn)的。STEP01

<!--根據(jù)userId刪除用戶信息--> <deleteid="deleteUserById"parameterType="Integer"> DELETEfromdsscm_user WHEREid=#{id} </delete>刪除用戶69編輯測(cè)試方法:在測(cè)試類MyBatisTest中,添加測(cè)試方法deleteUserTest(),該方法用于將id為21的用戶信息刪除。STEP02 @Test publicvoidfindUserByIdTest(){ …… //4、SqlSession執(zhí)行添加操作

//4.1執(zhí)行SqlSession的更新方法,返回的是SQL語(yǔ)句影響的行數(shù)

count=sqlSession.delete("cn.dsscm.dao.user.UserMapper.deleteUserById",21); //4.2通過(guò)返回結(jié)果判斷插入操作是否執(zhí)行成功

if(count>0){ System.out.println("您成功刪除了"+count+"條數(shù)據(jù)!"); }else{ System.out.println("執(zhí)行刪除操作失?。。?!"); } //4.3提交事務(wù)

sqlSmit(); …… }技能訓(xùn)練70實(shí)現(xiàn)供應(yīng)商表的查詢需求說(shuō)明在上一個(gè)練習(xí)的基礎(chǔ)上,實(shí)現(xiàn)供應(yīng)商表的增加操作。實(shí)現(xiàn)根據(jù)供應(yīng)商id修改供應(yīng)商信息的操作。實(shí)現(xiàn)根據(jù)供應(yīng)商id刪除供應(yīng)商信息的操作。增加和修改供應(yīng)商:使用insert元素和update元素。parameterType:Java實(shí)體類Provider。DAO層接口方法的返回類型:int。注意:createBy和creationDate,modifyDate和modifyBy這四個(gè)字段應(yīng)根據(jù)方法是增加或者修改,來(lái)進(jìn)行靈活操作。刪除供應(yīng)商:使用delete元素。練習(xí)完成時(shí)間:20分鐘提示共性問(wèn)題集中講解71常見(jiàn)問(wèn)題及解決辦法代碼規(guī)范問(wèn)題調(diào)試技巧共性問(wèn)題集中講解MyBatis

的工作原理05第1章初識(shí)MyBatisMyBatis工作原理圖MyBatis工作原理73MyBatis工作原理步驟

MyBatis框架在操作數(shù)據(jù)庫(kù)時(shí),大體經(jīng)過(guò)了8個(gè)步驟。下面結(jié)合MyBatis工作原理圖對(duì)每一步流程進(jìn)行詳細(xì)講解,具體如下。(1)MyBatis讀取核心配置文件mybatis-config.xml:mybatis-config.xml核心配置文件主要配置了MyBatis的運(yùn)行環(huán)境等信息。(2)加載映射文件Mapper.xm:Mapper.xml文件即SQL映射文件,該文件配置了操作數(shù)據(jù)庫(kù)的SQL語(yǔ)句,需要在mybatis-config.xml中加載才能執(zhí)行。(3)構(gòu)造會(huì)話工廠:通過(guò)MyBatis的環(huán)境等配置信息構(gòu)建會(huì)話工廠SqlSessionFactory,用于創(chuàng)建SqlSession。MyBatis工作原理74MyBatis工作原理步驟(3)構(gòu)造會(huì)話工廠:通過(guò)MyBatis的環(huán)境等配置信息構(gòu)建會(huì)話工廠SqlSessionFactory,用于創(chuàng)建SqlSession。(4)創(chuàng)建SqlSession對(duì)象:由會(huì)話工廠SqlSessionFactory創(chuàng)建SqlSession對(duì)象,該對(duì)象中包含了執(zhí)行SQL語(yǔ)句的所有方法。(5)動(dòng)態(tài)生成SQL語(yǔ)句:MyBatis底層定義了一個(gè)Executor接口用于操作數(shù)據(jù)庫(kù),它會(huì)根據(jù)SqlSession傳遞的參數(shù)動(dòng)態(tài)的生成需要執(zhí)行的SQL語(yǔ)句,同時(shí)負(fù)責(zé)查詢緩存地維護(hù)。MyBatis工作原理75MyBatis工作原理步驟(6)MappedStatement對(duì)象將傳入的Java對(duì)象映射到SQL語(yǔ)句中:SqlSession內(nèi)部通過(guò)執(zhí)行器Executor操作數(shù)據(jù)庫(kù),增刪改語(yǔ)句通過(guò)Executor接口的update()方法執(zhí)行,查詢語(yǔ)句通過(guò)query()方法執(zhí)行。這兩個(gè)執(zhí)行方法中包含一個(gè)MappedStatement類型的參數(shù),該參數(shù)是對(duì)映射信息的封裝,存儲(chǔ)了要映射的SQL語(yǔ)句的id、參數(shù)等。Mapper.xml文件中一個(gè)SQL語(yǔ)句對(duì)應(yīng)一個(gè)MappedStatement對(duì)象,SQL語(yǔ)句的id即是MappedStatement的id。MyBatis工作原理76MyBatis工作原理步驟(7)輸入?yún)?shù)映射:在執(zhí)行Executor類的update()方法和query()方法時(shí),MappedStatement對(duì)象會(huì)對(duì)用戶執(zhí)行SQL語(yǔ)句時(shí)輸入的參數(shù)進(jìn)行定義,Executor執(zhí)行器會(huì)在執(zhí)行SQL語(yǔ)句之前,通過(guò)MappedStatement對(duì)象將輸入的參數(shù)映射到SQL語(yǔ)句中。Executor執(zhí)行器對(duì)輸入?yún)?shù)的映射過(guò)程類似于JDBC編程對(duì)PreparedStatement對(duì)象設(shè)置參數(shù)的過(guò)程。(8)輸出結(jié)果映射:excutor()方法在數(shù)據(jù)庫(kù)中執(zhí)行完SQL語(yǔ)句后,MappedStatement對(duì)象會(huì)對(duì)輸出的結(jié)果進(jìn)行定義,Executor執(zhí)行器會(huì)在執(zhí)行SQL語(yǔ)句之后,通過(guò)MappedStatement對(duì)象將輸出結(jié)果映射至Java對(duì)象中。Executor執(zhí)行器將輸出結(jié)果映射到Java對(duì)象的過(guò)程類似于JDBC編程對(duì)結(jié)果的解析處理過(guò)程。MyBatis工作原理77本章小結(jié)

本章主要針對(duì)MyBatis框架進(jìn)行了講解。首先對(duì)框架的概念、優(yōu)點(diǎn)和當(dāng)前一些主流的JavaEE框架進(jìn)行了講解,然后對(duì)傳統(tǒng)JDBC的劣勢(shì)進(jìn)行了分析,由此引出了MyBatis框架,并對(duì)MyBatis框架的環(huán)境搭建、入門程序以及工作原理進(jìn)行了詳細(xì)地講解。通過(guò)本章的學(xué)習(xí),讀者可以了解MyBatis框架及其作用,熟悉MyBatis的工作原理,并能夠獨(dú)立完成MyBatis框架環(huán)境的搭建以及入門程序的編寫。本章小結(jié)78優(yōu)秀持久層框架:實(shí)體類和SQL語(yǔ)句之間建立映射關(guān)系搭建MyBatis開發(fā)環(huán)境MyBatis入門程序查詢用戶添加用戶修改用戶刪除用戶初識(shí)MyBatis1.下載mybatis.jar包并導(dǎo)入工程2.編寫MyBatis核心配置文件(mybatis-config.xml)3.創(chuàng)建實(shí)體類-POJO4.DAO層-SQL映射文件5.創(chuàng)建測(cè)試類根據(jù)據(jù)用戶編號(hào)查詢用戶信息根據(jù)用戶名模糊查詢用戶信息本章小結(jié)79本章作業(yè)?

本章作業(yè)請(qǐng)簡(jiǎn)述MyBatis框架與Hibernate框架的區(qū)別。請(qǐng)簡(jiǎn)述MyBatis的工作執(zhí)行流程。?預(yù)習(xí)作業(yè)MyBatis配置文件中的各個(gè)元素有什么作用?MyBatis映射文件中有哪些常用元素?80問(wèn)題及作業(yè)集中問(wèn)題&課后作業(yè)MyBatis的核心接口和類MyBatis的核心配置文件MyBatis的映射文件使用接口實(shí)現(xiàn)條件查詢使用接口實(shí)現(xiàn)添加、更新、刪除第2章

MyBatis的核心配置2024/1/29學(xué)習(xí)目標(biāo)/Target83了解MyBatis的核心接口和類的作用熟悉MyBatis的配置文件中各個(gè)元素的作用掌握MyBatis的映射文件中常用元素的使用方法掌握使用<select>元素實(shí)現(xiàn)條件查詢的方法掌握使用接口實(shí)現(xiàn)添加、更新、刪除的方法章節(jié)概述/Summary84通過(guò)上一章的學(xué)習(xí),讀者對(duì)MyBatis框架已經(jīng)有了一個(gè)初步了解,但是要想熟練地使用MyBatis框架進(jìn)行實(shí)際開發(fā),只會(huì)簡(jiǎn)單的配置是不行的,我們還需要對(duì)框架中的核心對(duì)象、核心配置文件以及映射文件有更深入的了解。本章將針對(duì)MyBatis核心對(duì)象、核心配置文件和映射文件進(jìn)行講解。目錄/CONTENTSMyBatis的核心接口和類使用接口實(shí)現(xiàn)條件查詢MyBatis的映射文件MyBatis的核心配置文件使用接口實(shí)現(xiàn)添加、更新、刪除14325MyBatis的

核心接口和類01第2章MyBatis的核心配置MyBatis基本要素MyBatis的核心對(duì)象SqlSessionFactoryBuilderSqlSessionFactorySqlSessionmybatis-config.xml系統(tǒng)核心配置文件mapper.xmlSQL映射文件87核心接口和類的結(jié)構(gòu)SqlSessionFactoryBuilderSqlSessionFactorybuild()openSession()SqlSession88SqlSessionFactoryBuilder什么是SqlSessionFactoryBuilder?用過(guò)即丟,其生命周期只存在于方法體內(nèi)可重用其來(lái)創(chuàng)建多個(gè)SqlSessionFactory實(shí)例負(fù)責(zé)構(gòu)建SqlSessionFactory,并提供多個(gè)build方法的重載89SqlSessionFactoryBuilder的多個(gè)重載build()方法

SqlSessionFactoryBuilder90build(InputStreaminputStream,Stringenvironment,Propertiesproperties)build(Readerreader,Stringenvironment,Propertiesproperties)build(Configurationconfig)SqlSessionFactoryBuilder構(gòu)建build()方法的形式由于build()方法中的參數(shù)environment和properties都可以為null,所以SqlSessionFactoryBuilder構(gòu)建SqlSessionFactory對(duì)象的build()方法按照配置信息的傳入方式,可以分為三種形式。SqlSessionFactoryBuilder91配置信息以三種形式提供給SqlSessionFactory的build方法:InputStream(字節(jié)流)、Reader(字符流)、Configuration(類)!形式一:SqlSessionFactoryBuilder構(gòu)建build()方法

上述build()方法中,參數(shù)inputStream是字節(jié)流,它封裝了XML文件形式的配置信息;參數(shù)environment和參數(shù)properties為可選參數(shù)。其中,參數(shù)environment決定將要加載的環(huán)境,包括數(shù)據(jù)源和事務(wù)管理器;參數(shù)properties決定將要加載的properties文件。

build(InputStreaminputStream,Stringenvironment,Propertiesproperties)SqlSessionFactoryBuilder92讀取XML文件構(gòu)造方式:Stringresource="mybatis-config.xml";InputStreamis=Resources.getResourceAsStream(resource);SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(is);形式二:SqlSessionFactoryBuilder構(gòu)建build()方法

由上述build()方法可知,第二種形式的build()方法參數(shù)作用與第一種形式大體一致,唯一不同的是,第一種形式的build()方法使用InputStream字節(jié)流封裝了XML文件形式的配置信息,而第二種形式的build()方法使用Reader字符流封裝了xml文件形式的配置信息。

build(Readerreader,Stringenvironment,Propertiesproperties)SqlSessionFactoryBuilder93形式三:SqlSessionFactoryBuilder構(gòu)建build()方法

通過(guò)以上代碼可知,配置信息可以通過(guò)InputStream(字節(jié)流)、Reader(字符流)、Configuration(類)三種形式提供給SqlSessionFactoryBuilder的build()方法。

build(Configurationconfig)SqlSessionFactoryBuilder94以讀取XML文件的方式構(gòu)造SqlSessionFactory對(duì)象

通過(guò)過(guò)讀取XML配置文件的方式構(gòu)造SqlSessionFactory對(duì)象的關(guān)鍵代碼如下所示。

//讀取配置文件InputStreaminputStream=Resources.getResourceAsStream("配置文件位置");//根據(jù)配置文件構(gòu)建SqlSessionFactorySqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);SqlSessionFactoryBuilder95使用什么模式創(chuàng)建SqlSessionFactory對(duì)象

SqlSessionFactory對(duì)象是線程安全的,它一旦被創(chuàng)建,在整個(gè)應(yīng)用程序執(zhí)行期間都會(huì)存在。如果我們多次創(chuàng)建同一個(gè)數(shù)據(jù)庫(kù)的SqlSessionFactory對(duì)象,那么該數(shù)據(jù)庫(kù)的資源將很容易被耗盡。通常每一個(gè)數(shù)據(jù)庫(kù)都只創(chuàng)建一個(gè)SqlSessionFactory對(duì)象,所以在構(gòu)建SqlSessionFactory對(duì)象時(shí),建議使用單例模式。SqlSessionFactoryBuilder96SqlSessionFactory97什么是SqlSessionFactory?SqlSessionFactory是MyBatis框架中十分重要的對(duì)象,它是單個(gè)數(shù)據(jù)庫(kù)映射關(guān)系經(jīng)過(guò)編譯后的內(nèi)存鏡像,其主要作用是創(chuàng)建SqlSession。SqlSessionFactory對(duì)象的實(shí)例可以通過(guò)SqlSessionFactoryBuilder對(duì)象來(lái)構(gòu)建,而SqlSessionFactoryBuilder則可以通過(guò)XML配置文件或一個(gè)預(yù)先定義好的Configuration實(shí)例構(gòu)建出SqlSessionFactory的實(shí)例。SqlSessionFactory98SqlSessionFactory對(duì)象是線程安全的,它一旦被創(chuàng)建,在整個(gè)應(yīng)用執(zhí)行期間都會(huì)存在。如果我們多次的創(chuàng)建同一個(gè)數(shù)據(jù)庫(kù)的SqlSessionFactory,那么此數(shù)據(jù)庫(kù)的資源將很容易被耗盡。為此,通常每一個(gè)數(shù)據(jù)庫(kù)都會(huì)只對(duì)應(yīng)一個(gè)SqlSessionFactory,所以在構(gòu)建SqlSessionFactory實(shí)例時(shí),建議使用單列模式。InputStreaminputStream=Resources.getResourceAsStream("配置文件位置");SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);通過(guò)XML配置文件構(gòu)建出的SqlSessionFactory實(shí)例現(xiàn)代碼如下:構(gòu)建SqlSessionFactorySqlSessionFactory的openSession()方法SqlSessionFactory99方法名稱描述SqlSessionopenSession()開啟一個(gè)事務(wù)。SqlSessionopenSession(BooleanautoCommit)參數(shù)autoCommit可設(shè)置是否開啟事務(wù)。SqlSessionopenSession(Connectionconnection)參數(shù)connection可提供自定義連接。SqlSessionopenSession(TransactionIsolationLevellevel)參數(shù)level可設(shè)置隔離級(jí)別。SqlSessionopenSession(ExecutorTypeexecType)參數(shù)execType有三個(gè)可選值。SqlSessionopenSession(ExecutorTypeexecType,BooleanautoCommit)參數(shù)execType有三個(gè)可選值。SqlSessionopenSession(ExecutorTypeexecType,Connectionconnection)參數(shù)ExecutorType有三個(gè)可選值。openSession(ExecutorTypeexecType)參數(shù)值

參數(shù)execType有三個(gè)可選值:ExecutorType.SIMPLE:表示為每條語(yǔ)句創(chuàng)建一條新的預(yù)處理語(yǔ)句。ExecutorType.REUSE:表示會(huì)復(fù)用預(yù)處理語(yǔ)句。ExecutorType.BATCH:表示會(huì)批量執(zhí)行所有更新語(yǔ)句。SqlSessionFactory100openSession(ExecutorTypeexecType,BooleanautoCommit)參數(shù)值

參數(shù)execType有三個(gè)可選值:ExecutorType.SIMPLE:表示為每條語(yǔ)句創(chuàng)建一條新的預(yù)處理語(yǔ)句。ExecutorType.REUSE:表示會(huì)復(fù)用預(yù)處理語(yǔ)句。ExecutorType.BATCH:表示會(huì)批量執(zhí)行所有更新語(yǔ)句。

參數(shù)autoCommit可設(shè)置是否開啟事務(wù)。

SqlSessionFactory101openSession(ExecutorTypeexecType,Connectionconnection)參數(shù)值

參數(shù)ExecutorType有三個(gè)可選值:ExecutorType.SIMPLE:表示為每條語(yǔ)句創(chuàng)建一條新的預(yù)處理語(yǔ)句。

溫馨提示

  • 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)論