Java-EE企業(yè)級應(yīng)用開發(fā)教程全書整本書電子教案教學(xué)教程_第1頁
Java-EE企業(yè)級應(yīng)用開發(fā)教程全書整本書電子教案教學(xué)教程_第2頁
Java-EE企業(yè)級應(yīng)用開發(fā)教程全書整本書電子教案教學(xué)教程_第3頁
Java-EE企業(yè)級應(yīng)用開發(fā)教程全書整本書電子教案教學(xué)教程_第4頁
Java-EE企業(yè)級應(yīng)用開發(fā)教程全書整本書電子教案教學(xué)教程_第5頁
已閱讀5頁,還剩1253頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第1章初識MyBatis框架《JavaEE企業(yè)級應(yīng)用開發(fā)教程(Spring+SpringMVC+MyBatis)(第2版)》學(xué)習(xí)目標(biāo)/Target了解框架的概念和優(yōu)點了解MyBatis框架的概念和優(yōu)點掌握MyBatis環(huán)境搭建掌握MyBatis入門程序的編寫熟悉MyBatis工作原理章節(jié)概述/Summary

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

EE開發(fā)主流框架有Spring、SpringMVC和Mybatis等,本章主要對框架的概念以及Mybatis的基礎(chǔ)知識進行介紹。目錄/Contents010203初識框架MyBatis介紹MyBatis環(huán)境搭建0405MyBatis入門程序MyBatis工作原理初識框架1.11.1.1框架概述先定一個小目標(biāo)!

先定一個小目標(biāo)!了解框架的概念,能夠知道框架是用于做什么的1.1.1框架概述

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

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

軟件框架可以形象地比喻成我們在蓋樓房時,用梁+柱子+承重墻搭建起來的鋼筋混凝土結(jié)構(gòu)的建筑框架,它是整個建筑的骨架。而實現(xiàn)的軟件功能,也就像在這個建筑框架中所要實現(xiàn)的不同類型、功能的房子,比如健身房、商場、酒店、飯店等。1.1.2框架的優(yōu)勢先定一個小目標(biāo)!

先定一個小目標(biāo)!了解框架的優(yōu)勢,能夠說出框架的優(yōu)勢有哪些1.1.2框架的優(yōu)勢

在早期Java

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

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

如果全部采用JSP+Servlet技術(shù)進行軟件的開發(fā),因為分層不夠清晰,業(yè)務(wù)邏輯的實現(xiàn)無法單獨分離出來,從而造成系統(tǒng)后期維護困難。

(2)代碼重用性低

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

EE開發(fā)弊端

1.1.2框架的優(yōu)勢

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

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

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

3.提高軟件性能:使用框架進行軟件開發(fā),可以減少程序中的冗余代碼。例如,使用Spring框架開發(fā)時,通過Spring的IOC特性,可以將對象之間的依賴關(guān)系交給Spring控制,方便解耦,簡化開發(fā);使用MyBatis框架開發(fā)時,MyBatis提供了XML標(biāo)簽,支持動態(tài)的SQL,開發(fā)人員無需在類中編寫大量的SQL語句,只需要在配置文件中進行配置即可。框架優(yōu)勢1.1.3當(dāng)前主流框架先定一個小目標(biāo)!

先定一個小目標(biāo)!了解當(dāng)前主流框架,能夠說出當(dāng)前常用的框架有哪些1.1.3當(dāng)前主流框架

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

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

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

MyBatis是Apache的一個開源項目iBatis,2010年這個項目由ApacheSoftwareFoundation遷移到了GoogleCode,并且改名為MyBatis,2013年11月MyBatis又被遷移到Github。

MyBatis是一個優(yōu)秀的持久層框架,它可以在實體類和SQL語句之間建立映射關(guān)系,是一種半自動化的ORM(Object/RelationMapping,即對象關(guān)系映射)實現(xiàn)。MyBatis封裝性要低于Hibernate,但它性能優(yōu)越、簡單易學(xué),在互聯(lián)網(wǎng)應(yīng)用的開發(fā)中被廣泛使用。

MyBatis框架1.1.3當(dāng)前主流框架

SpringBoot框架是Pivotal團隊基于Spring開發(fā)的全新框架,其設(shè)計初衷是為了簡化Spring的配置,使用戶能夠構(gòu)建獨立運行的程序,提高開發(fā)效率。

SpringBoot框架本身并不提供Spring框架的核心特性及擴展功能,它只是用于快速、敏捷地開發(fā)新一代基于Spring框架的應(yīng)用,同時它還集成了大量的第三方類庫(如Jackson、JDBC、Redis等),使用戶只需少量配置就能完成相應(yīng)功能。SpringBoot框架

1.1.3當(dāng)前主流框架

SpringCloud是一系列框架的有序集合,為開發(fā)人員構(gòu)建微服務(wù)架構(gòu)提供了完整的解決方案,它利用SpringBoot的開發(fā)便利性巧妙地簡化了分布式系統(tǒng)的開發(fā)。例如,配置管理、服務(wù)發(fā)現(xiàn)、控制總線等操作,都可以使用SpringBoot做到一鍵啟動和部署。可以說,SpringCloud將SpringBoot框架進行了再封裝,屏蔽掉了復(fù)雜的配置和實現(xiàn)原理,具有簡單易懂、易部署和易維護等特點。SpringCloud框架MyBatis介紹1.21.2.1傳統(tǒng)JDBC的劣勢先定一個小目標(biāo)!

先定一個小目標(biāo)!熟悉傳統(tǒng)JDBC的劣勢,能夠說出傳統(tǒng)JDBC的劣勢有哪些JDBC的劣勢1.2.1傳統(tǒng)JDBC的劣勢

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

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

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

先定一個小目標(biāo)!了解MyBatis框架的概述,能夠說出MyBatis框架如何解決JDBC編程劣勢什么是MyBatis1.2.2MyBatis概述

MyBatis是一個支持普通SQL查詢、存儲過程以及高級映射的持久層框架,它消除了幾乎所有的JDBC代碼和參數(shù)的手動設(shè)置以及對結(jié)果集的檢索,使用簡單的XML或注解進行配置和原始映射,將接口和Java的POJO映射成數(shù)據(jù)庫中的記錄,使得Java開發(fā)人員可以使用面向?qū)ο蟮木幊趟枷雭聿僮鲾?shù)據(jù)庫。1.2.2MyBatis概述

MyBatis框架是一個ORM(Object/RelationMapping,即對象關(guān)系映射)框架。所謂的ORM就是一種為了解決面向?qū)ο笈c關(guān)系型數(shù)據(jù)庫中數(shù)據(jù)類型不匹配的技術(shù),它通過描述Java對象與數(shù)據(jù)庫表之間的映射關(guān)系,自動將Java應(yīng)用程序中的對象持久化到關(guān)系型數(shù)據(jù)庫的表中。ORM框架的工作原理可以通過一張圖來展示。1.2.2MyBatis概述解決JDBC編程劣勢

針對JDBC編程的劣勢,MyBatis提供了以下解決方案,具體如下。

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

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

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

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

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

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

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

解決方案:MyBatis自動將SQL執(zhí)行結(jié)果映射至Java對象,通過Statement中的resultType定義輸出結(jié)果的類型。MyBatis環(huán)境搭建1.31.3MyBatis環(huán)境搭建先定一個小目標(biāo)!

先定一個小目標(biāo)!掌握MyBatis環(huán)境的搭建,能夠熟練搭建MyBatis開發(fā)環(huán)境MyBatis環(huán)境搭建的步驟1.3MyBatis環(huán)境搭建

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

(2)引入相關(guān)依賴;(3)數(shù)據(jù)庫準(zhǔn)備;(4)編寫數(shù)據(jù)庫連接信息配置文件;(5)編寫核心配置文件和映射文件。STEP01創(chuàng)建工程:在IntelliJIDEA中,創(chuàng)建名稱為mybatistest的Maven工程1.3MyBatis環(huán)境搭建STEP02引入相關(guān)依賴:由于本項目要連接數(shù)據(jù)庫以及對程序進行測試,所以需要在項目的pom.xml文件中導(dǎo)入MySQL驅(qū)動包、Junit測試包、MyBatis的核心包等相關(guān)依賴。<!--只展示了其中一個依賴--><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.11</version></dependency>...</dependencies>1.3MyBatis環(huán)境搭建1.3.MyBatis環(huán)境搭建首次引依賴需要聯(lián)網(wǎng)IDEA默認(rèn)集成的Maven,所以在第一次引入依賴時,需要在聯(lián)網(wǎng)狀態(tài)下進行,且引入依賴需要較長時間,耐心等待到依賴引入完成即可。

STEP03創(chuàng)建數(shù)據(jù)庫:在MySQL中創(chuàng)建一個名稱為mybatis的數(shù)據(jù)庫,具體SQL語句如下。createdatabasemybatis;1.3MyBatis環(huán)境搭建STEP04創(chuàng)建數(shù)據(jù)庫連接信息配置文件:在項目的src/main/resources目錄下創(chuàng)建數(shù)據(jù)庫連接的配置文件,這里將其命名為perties,在該文件中配置數(shù)據(jù)庫連接的參數(shù)。mysql.driver=com.mysql.cj.jdbc.Drivermysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=falsemysql.username=rootmysql.password=root1.3MyBatis環(huán)境搭建STEP05創(chuàng)建MyBatis的核心配置文件:在項目的src/main/resources目錄下創(chuàng)建MyBatis的核心配置文件,該文件主要用于項目的環(huán)境配置,如數(shù)據(jù)庫連接相關(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>1.3MyBatis環(huán)境搭建MyBatis入門程序1.41.4MyBatis入門程序先定一個小目標(biāo)!

先定一個小目標(biāo)!掌握MyBatis入門程序,能夠手動編寫MyBatis程序上一節(jié)完成了MyBatis環(huán)境的搭建,本節(jié)將在MyBatis環(huán)境下實現(xiàn)一個入門程序來演示MyBatis框架的使用,該程序要求實現(xiàn)根據(jù)id查詢用戶信息的操作。1.4MyBatis入門程序STEP01數(shù)據(jù)準(zhǔn)備:在mybatis數(shù)據(jù)庫中創(chuàng)建users表,并在users表中插入幾條數(shù)據(jù)。usemybatis;createtableusers(uidintprimarykeyauto_increment,unamevarchar(20)notnull,uageintnotnull);insertintousers(uid,uname,uage)values(null,'張三',20),(null,'李四',18);1.4MyBatis入門程序STEP02創(chuàng)建POJO實體:在項目的src/main/java目錄下創(chuàng)建com.itheima.pojo包,在com.itheima.pojo包下創(chuàng)建User類,該類用于封裝User對象的屬性。packagecom.itheima.pojo;publicclassUser{privateintuid;

//

用戶idprivateStringuname;//

用戶姓名privateintuage;

//

用戶年齡

//省略getter/setter方法

…}1.4MyBatis入門程序STEP03創(chuàng)建映射文件UserMapper.xml:在項目的src/main/resources目錄下創(chuàng)建一個文件夾,在mapper文件夾下創(chuàng)建映射文件UserMapper.xml,該文件主要用于實現(xiàn)SQL語句和Java對象之間的映射,使SQL語句查詢出來的關(guān)系型數(shù)據(jù)能夠被封裝成Java對象。

<mappernamespace="com.itheima.pojo.User"><!--id="接口中的方法名"parameterType="傳入的參數(shù)類型"

resultType="返回實體類對象,使用包.類名"--><selectid="findById"parameterType="int" resultType="com.itheima.pojo.User"> select*fromuserswhereuid=#{id}</select></mapper>1.4MyBatis入門程序STEP04修改mybatis-config.xml配置文件:在mybatis-config.xml映射文件中添加UserMapper.xml映射文件路徑的配置,用于將UserMapper.xml映射文件加載到程序中。

<!–mapping文件路徑配置--><mappers><mapperresource="mapper/UserMapper.xml"/></mappers>1.4MyBatis入門程序1.4MyBatis入門程序一個項目多個配置文件

如果一個項目有多個映射文件,則mybatis-config.xml核心配置文件中需要在<mappers>元素下配置多個<mapper>元素指定映射文件的路徑。STEP05編寫測試類:在項目的src/test/java目錄下創(chuàng)建Test包,在Test包下創(chuàng)建UserTest類,該類主要用于程序測試。

publicclassUserTest{

publicvoiduserFindByIdTest(){

Stringresources="mybatis-config.xml";

Readerreader=null;

try{

reader=Resources.getResourceAsReader(resources);}catch(IOExceptione){

e.printStackTrace();}

SqlSessionFactorysqlMapper=new SqlSessionFactoryBuilder().build(reader);

SqlSessionsession=sqlMapper.openSession();Useruser=session.selectOne("findById",1);

System.out.println(user.getUname());

session.close();}}

1.4MyBatis入門程序MyBatis工作原理1.51.5MyBatis工作原理先定一個小目標(biāo)!

先定一個小目標(biāo)!熟悉MyBatis工作原理,能夠理解并說出MyBatis的工作原理MyBatis工作原理圖1.5MyBatis工作原理MyBatis工作原理步驟1.5MyBatis工作原理

MyBatis框架在操作數(shù)據(jù)庫時,大體經(jīng)過了8個步驟。下面結(jié)合MyBatis工作原理圖對每一步流程進行詳細(xì)講解,具體如下。(1)MyBatis讀取核心配置文件mybatis-config.xml:mybatis-config.xml核心配置文件主要配置了MyBatis的運行環(huán)境等信息。(2)加載映射文件Mapper.xml:Mapper.xml文件即SQL映射文件,該文件配置了操作數(shù)據(jù)庫的SQL語句,需要在mybatis-config.xml中加載才能執(zhí)行。(3)構(gòu)造會話工廠:通過MyBatis的環(huán)境等配置信息構(gòu)建會話工廠SqlSessionFactory,用于創(chuàng)建SqlSession。MyBatis工作原理步驟1.5MyBatis工作原理(4)創(chuàng)建會話對象:由會話工廠SqlSessionFactory創(chuàng)建SqlSession對象,該對象中包含了執(zhí)行SQL語句的所有方法。(5)創(chuàng)建執(zhí)行器:會話對象本身不能直接操作數(shù)據(jù)庫,MyBatis底層定義了一個Executor接口用于操作數(shù)據(jù)庫,執(zhí)行器會根據(jù)SqlSession傳遞的參數(shù)動態(tài)的生成需要執(zhí)行的SQL語句,同時負(fù)責(zé)查詢緩存地維護。(6)封裝SQL信息:SqlSession內(nèi)部通過執(zhí)行器Executor操作數(shù)據(jù)庫,執(zhí)行器將待處理的SQL信息封裝到MappedStatement對象中。MyBatis工作原理步驟1.5MyBatis工作原理(7)操作數(shù)據(jù)庫:根據(jù)動態(tài)生成的SQL操作數(shù)據(jù)庫。(8)輸出結(jié)果映射:執(zhí)行SQL語句之后,通過MappedStatement對象將輸出結(jié)果映射至Java對象中。本章小結(jié)本章小結(jié)

本章主要針對MyBatis框架進行了講解。首先對框架的概念、優(yōu)點和當(dāng)前一些主流的JavaEE框架進行了講解,然后對傳統(tǒng)JDBC的劣勢進行了分析,由此引出了MyBatis框架,并對MyBatis框架的環(huán)境搭建、入門程序以及工作原理進行了詳細(xì)地講解。通過本章的學(xué)習(xí),讀者可以了解MyBatis框架及其作用,熟悉MyBatis的工作原理,并能夠獨立完成MyBatis框架環(huán)境的搭建以及入門程序的編寫。第2章MyBatis的核心配置《JavaEE企業(yè)級應(yīng)用開發(fā)教程(Spring+SpringMVC+MyBatis)(第2版)》學(xué)習(xí)目標(biāo)/Target了解MyBatis核心對象的作用

掌握MyBatis核心配置文件及其元素的使用掌握MyBatis映射文件及其元素的使用

章節(jié)概述/Summary

通過上一章的學(xué)習(xí),讀者對MyBatis框架已經(jīng)有了一個初步了解,但是要想熟練地使用MyBatis框架進行實際開發(fā),只會簡單的配置是不行的,我們還需要對框架中的核心對象、核心配置文件以及映射文件有更深入的了解。本章將針對MyBatis核心對象、核心配置文件和映射文件進行講解。目錄/Contents010203MyBatis的核心對象MyBatis核心配置文件MyBatis映射文件04案例:員工管理系統(tǒng)MyBatis的核心對象2.12.1.1SqlSessionFactoryBuilder先定一個小目標(biāo)!

先定一個小目標(biāo)!了解Mybatis框架的核心對象SqlSessionFactoryBuilder,能夠說出它的作用和特點SqlSessionFactoryBuilder的多個重載build()方法

2.1.1SqlSessionFactoryBuilderSqlSessionFactoryBuilder構(gòu)建build()方法的形式2.1.1SqlSessionFactoryBuilder由于build()方法中的參數(shù)environment和properties都可以為null,所以SqlSessionFactoryBuilder構(gòu)建SqlSessionFactory對象的build()方法按照配置信息的傳入方式,可以分為三種形式。形式一:SqlSessionFactoryBuilder構(gòu)建build()方法2.1.1SqlSessionFactoryBuilder

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

build(InputStreaminputStream,Stringenvironment,Propertiesproperties)形式二:SqlSessionFactoryBuilder構(gòu)建build()方法2.1.1SqlSessionFactoryBuilder

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

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

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

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

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

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

SqlSessionFactory對象是線程安全的,它一旦被創(chuàng)建,在整個應(yīng)用程序執(zhí)行期間都會存在。如果我們多次創(chuàng)建同一個數(shù)據(jù)庫的SqlSessionFactory對象,那么該數(shù)據(jù)庫的資源將很容易被耗盡。通常每一個數(shù)據(jù)庫都只創(chuàng)建一個SqlSessionFactory對象,所以在構(gòu)建SqlSessionFactory對象時,建議使用單例模式。2.1.2SqlSessionFactory先定一個小目標(biāo)!

先定一個小目標(biāo)!了解Mybatis框架的核心對象SqlSessionFactory,能夠說出它的作用和特點SqlSessionFactory的openSession()方法2.1.2SqlSessionFactory方法名稱描述SqlSessionopenSession()開啟一個事務(wù)。SqlSessionopenSession(BooleanautoCommit)參數(shù)autoCommit可設(shè)置是否開啟事務(wù)。SqlSessionopenSession(Connectionconnection)參數(shù)connection可提供自定義連接。SqlSessionopenSession(TransactionIsolationLevellevel)參數(shù)level可設(shè)置隔離級別。SqlSessionopenSession(ExecutorTypeexecType)參數(shù)execType有三個可選值。SqlSessionopenSession(ExecutorTypeexecType,BooleanautoCommit)參數(shù)execType有三個可選值。SqlSessionopenSession(ExecutorTypeexecType,Connectionconnection)參數(shù)ExecutorType有三個可選值。openSession(ExecutorTypeexecType)參數(shù)值

2.1.2SqlSessionFactory

參數(shù)execType有三個可選值:

ExecutorType.SIMPLE:表示為每條語句創(chuàng)建一條新的預(yù)處理語句。

ExecutorType.REUSE:表示會復(fù)用預(yù)處理語句。

ExecutorType.BATCH:表示會批量執(zhí)行所有更新語句。openSession(ExecutorTypeexecType,BooleanautoCommit)參數(shù)值

2.1.2SqlSessionFactory

參數(shù)execType有三個可選值,同openSession(ExecutorTypeexecType)的參數(shù)。

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

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

2.1.2SqlSessionFactory

參數(shù)execType有三個可選值,同openSession(ExecutorTypeexecType)的參數(shù)。

參數(shù)connection可提供自定義連接。

2.1.3SqlSession先定一個小目標(biāo)!

先定一個小目標(biāo)!掌握Mybatis框架的核心對象SqlSession,能夠使用SqlSession的常用方法執(zhí)行SQL操作SqlSession對象的作用

2.1.3SqlSession

SqlSession是MyBatis框架中另一個重要的對象,它是應(yīng)用程序與持久層之間執(zhí)行交互操作的一個單線程對象,主要作用是執(zhí)行持久化操作,類似于JDBC中的Connection。SqlSession對象包含了執(zhí)行SQL操作的方法,由于其底層封裝了JDBC連接,所以可以直接使用SqlSession對象來執(zhí)行已映射的SQL語句。

SqlSession對象中常用方法

2.1.3SqlSession方法名稱描述<T>TselectOne(Stringstatement)查詢方法。參數(shù)statement是在配置文件中定義的<select>元素的id。<T>TselectOne(Stringstatement,Objectparameter)查詢方法。parameter是查詢語句所需的參數(shù)。<E>List<E>selectList(Stringstatement)查詢方法。參數(shù)statement是在配置文件中定義的<select>元素的id。<E>List<E>selectList(Stringstatement,Objectparameter)查詢方法。parameter是查詢語句所需的參數(shù)。<E>List<E>selectList(Stringstatement,Objectparameter,RowBoundsrowBounds)查詢方法。rowBounds是用于分頁的參數(shù)對象。voidselect(Stringstatement,Objectparameter,ResultHandlerhandler)查詢方法。,handler對象用于處理查詢語句返回的復(fù)雜結(jié)果集。SqlSession對象中常用方法

2.1.3SqlSession方法名稱描述intinsert(Stringstatement)插入方法。參數(shù)statement是在配置文件中定義的<insert>元素的id。intinsert(Stringstatement,Objectparameter)插入方法。parameter是插入語句所需的參數(shù)。intupdate(Stringstatement)更新方法。參數(shù)statement是在配置文件中定義的<update>元素的id。intupdate(Stringstatement,Objectparameter)更新方法。parameter是更新語句所需的參數(shù)。intdelete(Stringstatement)刪除方法。參數(shù)statement是在配置文件中定義的<delete>元素的id。intdelete(Stringstatement,Objectparameter)刪除方法。parameter是刪除語句所需的參數(shù)。SqlSession對象中常用方法

2.1.3SqlSession方法名稱描述voidcommit()提交事務(wù)的方法。voidrollback()回滾事務(wù)的方法。voidclose()關(guān)閉SqlSession對象。<T>TgetMapper(Class<T>type)該方法會返回Mapper接口的代理對象。參數(shù)type是Mapper的接口類型。ConnectiongetConnection()獲取JDBC數(shù)據(jù)庫連接對象的方法。SqlSession對象的使用范圍

2.1.3SqlSession

每一個線程都應(yīng)該有一個自己的SqlSession對象,并且該對象不能共享。SqlSession對象是線程不安全的,因此其使用范圍最好在一次請求或一個方法中,絕不能將其放在類的靜態(tài)字段、對象字段或任何類型的管理范圍(如Servlet的HttpSession)中使用。SqlSession對象使用完之后,要及時的關(guān)閉,SqlSession對象通常放在finally塊中關(guān)閉,代碼如下所示。SqlSessionsqlSession=sqlSessionFactory.openSession();try{ //此處執(zhí)行持久化操作}finally{ sqlSession.close(); }MyBatis核心配置文件2.22.2.1配置文件的主要元素先定一個小目標(biāo)!

先定一個小目標(biāo)!熟悉Mybatis配置文件的主要元素,能夠說出主要元素都有哪些MyBatis核心配置文件中的主要元素2.2.1配置文件的主要元素<configuration>的子元素的執(zhí)行順序2.2.1配置文件的主要元素

<configuration>元素是整個XML配置文件的根元素,相當(dāng)于MyBatis各元素的管理員。<configuration>有很多子元素,MyBatis的核心配置就是通過這些子元素完成的。需要注意的是,在核心配置文件中,<configuration>的子元素必須按照上圖由上到下的順序進行配置,否則MyBatis在解析XML配置文件的時候會報錯。

2.2.2<properties>元素先定一個小目標(biāo)!

先定一個小目標(biāo)!掌握Mybatis配置文件的<properties>元素,能夠使用<properties>元素讀取外部文件的配置信息<properties>是一個配置屬性的元素,該元素的作用是讀取外部文件的配置信息。假設(shè)現(xiàn)在有一個配置文件perties,該文件配置了數(shù)據(jù)庫的連接信息,具體如下:jdbc.driver=com.mysql.cj.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mybatisjdbc.username=rootjdbc.password=root2.2.2<properties>元素如果想獲取數(shù)據(jù)庫的連接信息,可以在MyBatis的核心配置文件mybatis-config.xml中使用<properties>元素先引入perties文件,具體代碼如下:<propertiesresource="perties"/>2.2.2<properties>元素引入perties文件后,如果希望動態(tài)獲取perties文件中的數(shù)據(jù)庫連接信息,可以使用<property>元素配置,示例代碼如下:<dataSourcetype="POOLED"><!--數(shù)據(jù)庫驅(qū)動-->

<propertyname="driver"value="${jdbc.driver}"/><!--連接數(shù)據(jù)庫的url-->

<propertyname="url"value="${jdbc.url}"/><!--連接數(shù)據(jù)庫的用戶名-->

<propertyname="username"value="${jdbc.username}"/><!--連接數(shù)據(jù)庫的密碼-->

<propertyname="password"value="${jdbc.password}"/></dataSource>2.2.2<properties>元素perties文件實現(xiàn)動態(tài)參數(shù)配置2.2.2<properties>元素

完成上述配置后,<dataSource>元素中連接數(shù)據(jù)庫的4個屬性(driver、url、username和password)值將會由perties文件中對應(yīng)的值來動態(tài)替換。這樣一來,<properties>元素就可以通過perties文件實現(xiàn)動態(tài)參數(shù)配置。2.2.3<settings>元素先定一個小目標(biāo)!

先定一個小目標(biāo)!掌握Mybatis配置文件的<settings>元素,能夠使用<settings>元素開啟緩存和開啟延遲加載2.2.3<settings>元素<settings>元素中的常見配置參數(shù)配置參數(shù)描述cacheEnabled用于配置是否開啟緩存。lazyLoadingEnabled延遲加載的全局開關(guān)。aggressiveLazyLoading關(guān)聯(lián)對象屬性的延遲加載開關(guān)。multipleResultSetsEnabled是否允許單一語句返回多結(jié)果集(需要兼容驅(qū)動)。useColumnLabel使用列標(biāo)簽代替列名。useGeneratedKeys允許JDBC支持自動生成主鍵,需要驅(qū)動兼容。2.2.3<settings>元素<settings>元素中的常見配置參數(shù)配置參數(shù)描述autoMappingBehavior指定MyBatis應(yīng)如何自動映射列到字段或?qū)傩?。defaultExecutorType配置默認(rèn)的執(zhí)行器。defaultStatementTimeout配置超時時間,它決定驅(qū)動等待數(shù)據(jù)庫響應(yīng)的秒數(shù)。mapUnderscoreToCamelCase是否開啟自動駝峰命名規(guī)則(camelcase)映射。jdbcTypeForNull當(dāng)沒有為參數(shù)提供特定的JDBC類型時,為空值指定JDBC類型。2.2.3<settings>元素

<settings>元素中常見配置參數(shù)的使用方式<settings>

<!--

是否開啟緩存-->

<settingname="cacheEnabled"value="true"/><!--

是否開啟延遲加載,如果開啟,所有關(guān)聯(lián)對象都會延遲加載--><settingname="lazyLoadingEnabled"value="true"/><!--

是否開啟關(guān)聯(lián)對象屬性的延遲加載,如果開啟,對任意延遲屬性的調(diào)用都

會使用帶有延遲加載屬性的對象向完整加載,否則每種屬性都按需加載--><settingname="aggressiveLazyLoading"value="true"/>...</settings>2.2.4<typeAliases>元素先定一個小目標(biāo)!

先定一個小目標(biāo)!掌握Mybatis配置文件的<typeAliases>元素,能夠使用<typeAliases>元素設(shè)置別名2.2.4<typeAliases>元素

核心配置文件若要引用一個POJO實體類,需要輸入POJO實體類的全限定類名,而全限定類名比較冗長,如果直接輸入,很容易拼寫錯誤。例如,POJO實體類User的全限定類名是com.itheima.pojo.User,未設(shè)置別名之前,映射文件的select語句塊若要引用POJO類User,必須使用其全限定類名,引用代碼如下。

<selectid="findById"parameterType="int"resultType="com.itheima.pojo.User">select*fromuserswhereuid=#{id}</select>多個全限定類設(shè)置別名的方式2.2.4<typeAliases>元素方式一:在<typeAliases>元素下,使用多個<typeAlias>元素為每一個全限定類逐個配置別名。<typeAliases><typeAliasalias=“Usertype="com.itheima.pojo.User"/>

<typeAliasalias="Student"type="com.itheima.pojo.Student"/><typeAliasalias="Employee" type="com.itheima.pojo.Employee"/><typeAliasalias="Animal"type="com.itheima.pojo.Animal"/></typeAliases>多個全限定類設(shè)置別名的方式2.2.4<typeAliases>元素方式二:通過自動掃描包的形式自定義別名。<typeAliases><packagename="com.itheima.pojo"/></typeAliases>常見Java類型的默認(rèn)別名問題2.2.4<typeAliases>元素

除了可以使用<typeAliases>元素為實體類自定義別名外,MyBatis框架還為許多常見的Java類型(如數(shù)值、字符串、日期和集合等)提供了相應(yīng)的默認(rèn)別名。例如別名_byte映射類型byte、_long映射類型long等,別名可以在MyBatis中直接使用,但由于別名不區(qū)分大小寫,所以在使用時要注意重復(fù)定義的覆蓋問題。

2.2.5<environments>元素先定一個小目標(biāo)!

先定一個小目標(biāo)!掌握Mybatis配置文件的<environments>元素,能夠使用<environments>元素定義運行環(huán)境<environments>元素配置運行環(huán)境2.2.5<environments>元素

MyBatis可以配置多套運行環(huán)境,如開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境等,我們可以靈活選擇不同的配置,從而將SQL映射到不同運行環(huán)境的數(shù)據(jù)庫中。不同的運行環(huán)境可以通過<environments>元素來配置,但不管增加幾套運行環(huán)境,都必須要明確選擇出當(dāng)前要用的唯一的一個運行環(huán)境。

<environments>各元素配置運行環(huán)境2.2.5<environments>元素

MyBatis的運行環(huán)境信息包括事務(wù)管理器和數(shù)據(jù)源。在MyBatis的核心配置文件中,MyBatis通過<environments>元素定義一個運行環(huán)境。<environment>元素有兩個子元素,<transactionManager>元素和<daraSource>元素。<transactionManager>元素用于配置運行環(huán)境的事務(wù)管理器;<daraSource>元素用于配置運行環(huán)境的數(shù)據(jù)源信息。

使用<environments>元素進行配置的示例代碼2.2.5<environments>元素<environmentsdefault="development">

<environmentid="development"><transactionManagertype="JDBC"/><!—設(shè)置使用JDBC事務(wù)管理--><dataSourcetype="POOLED"><!-配置數(shù)據(jù)源--><propertyname="driver"value="${jdbc.driver}"/><propertyname="url"value="${jdbc.url}"/><propertyname="username"value="${jdbc.username}"/><propertyname="password"value="${jdbc.password}"/></dataSource>

</environment> ...</environments><transcationManager>元素配置事務(wù)管理器2.2.5<environments>元素

在MyBatis中,<transcationManager>元素可以配置兩種類型的事務(wù)管理器,分別是JDBC和MANAGED。

JDBC:此配置直接使用JDBC的提交和回滾設(shè)置,它依賴于從數(shù)據(jù)源得到的連接來管理事務(wù)的作用域。

MANAGED:此配置不提交或回滾一個連接,而是讓容器來管理事務(wù)的整個生命周期。默認(rèn)情況下,它會關(guān)閉連接,但可以將<transcationManager>元素的closeConnection屬性設(shè)置為false來阻止它默認(rèn)的關(guān)閉行為。

2.2.5<environments>元素MyBatis數(shù)據(jù)源類型

項目中使用Spring+MyBatis,則沒必要在MyBatis中配置事務(wù)管理器,實際開發(fā)中,項目會使用Spring自帶的管理器來實現(xiàn)事務(wù)管理。對于數(shù)據(jù)源的配置,MyBatis提供了UNPOOLED、POOLED和JNDI三種數(shù)據(jù)源類型。UNPOOLED數(shù)據(jù)源

2.2.5<environments>元素

UNPOOLED表示數(shù)據(jù)源為無連接池類型。配置此數(shù)據(jù)源類型后,程序在每次被請求時會打開和關(guān)閉數(shù)據(jù)庫連接。UNPOOLED適用于對性能要求不高的簡單應(yīng)用程。UNPOOLED類型的數(shù)據(jù)源需要配置5種屬性。

UNPOOLED數(shù)據(jù)源需要配置的屬性2.2.5<environments>元素屬性說明driverJDBC驅(qū)動的Java類的完全限定名url數(shù)據(jù)庫的URL地址username登錄數(shù)據(jù)庫的用戶名password登錄數(shù)據(jù)庫的密碼defaultTransactionIsolationLevel默認(rèn)的連接事務(wù)隔離級別POOLED數(shù)據(jù)源

2.2.5<environments>元素

POOLED表示數(shù)據(jù)源為連接池類型。POOLED數(shù)據(jù)源利用“池”的概念將JDBC連接對象組織起來,節(jié)省了在創(chuàng)建新的連接對象時需要初始化和認(rèn)證的時間。POOLED數(shù)據(jù)源使得并發(fā)Web應(yīng)用可以快速的響應(yīng)請求,是當(dāng)前比較流行的數(shù)據(jù)源配置類型。

POOLED數(shù)據(jù)源可額外配置的屬性2.2.5<environments>元素屬性說明poolMaximumActiveConnections在任意時間可以存在的活動連接數(shù)量,默認(rèn)值:10。poolMaximumIdleConnections任意時間可能存在的空閑連接數(shù)。poolMaximumCheckoutTime在被強制返回之前,池中連接被檢出時間,默認(rèn)值:20000毫秒。poolTimeToWait如果獲取連接花費的時間較長,它會給連接池打印狀態(tài)日志并重新嘗試獲取一個連接,默認(rèn)值:20000毫秒。poolPingQuery發(fā)送到數(shù)據(jù)庫的偵測查詢,用來檢驗連接是否處在正常工作秩序中。默認(rèn)是“NOPINGQUERYSET”。poolPingEnabled是否啟用偵測查詢,默認(rèn)值:false。poolPingConnectionsNotUsedFor配置poolPingQuery的使用頻度。JNDI數(shù)據(jù)源2.2.5<environments>元素JNDI表示數(shù)據(jù)源可以在EJB或應(yīng)用服務(wù)器等容器中使用。JNDI數(shù)據(jù)源需要配置的屬性如下所示。

屬性說明initial_context該屬性主要用于在InitialContext中尋找上下文。該屬性為可選屬性,在忽略時,data_source屬性會直接從InitialContext中尋找。data_source該屬性表示引用數(shù)據(jù)源對象位置的上下文路徑。如果提供了initial_context配置,那么程序會在其返回的上下文中進行查找;如果沒有提供,則直接在InitialContext中查找。2.2.6<mappers>元素先定一個小目標(biāo)!

先定一個小目標(biāo)!掌握Mybatis配置文件的<mappers>元素,能夠使用<mappers>元素引入MyBatis映射文件<mappers>元素作用

2.2.6<mappers>元素在MyBatis的核心配置文件中,<mappers>元素用于引入MyBatis映射文件。映射文件包含了POJO對象和數(shù)據(jù)表之間的映射信息,MyBatis通過核心配置文件中的<mappers>元素找到映射文件并解析其中的映射信息。通過<mappers>元素引入映射文件的方法有4種。a.使用類路徑引入2.2.6<mappers>元素

使用類路徑引入映射文件的示例代碼如下所示。

<mappers><mapperresource="com/itheima/mapper/UserMapper.xml"/></mappers>b.使用本地文件路徑引入2.2.6<mappers>元素

使用本地文件路徑引入映射文件的示例代碼如下所示。

<mappers><mapperurl="file:///D:/com/itheima/mapper/UserMapper.xml"/></mappers>c.使用接口類引入2.2.6<mappers>元素

使用接口類引入映射文件的示例代碼如下所示。

<mappers><mapperclass="com.itheima.mapper.UserMapper"/></mappers>d.使用包名引入2.2.6<mappers>元素

使用包名引入映射文件的示例代碼如下所示。

<mappers><packagename="com.itheima.mapper"/></mappers>MyBatis映射文件2.32.3.1MyBatis映射文件中的常用元素先定一個小目標(biāo)!

先定一個小目標(biāo)!掌握Mybatis映射文件中的常用元素,能夠使用MyBatis映射文件中的常用元素編寫語句MyBatis映射文件中的常用元素2.3.1MyBatis映射文件中的常用元素屬性說明mapper映射文件的根元素,該元素只有一個namespace屬性(命名空間)。cache配置給定命名空間的緩存。cache-ref從其他命名空間引用緩存配置。resultMap描述數(shù)據(jù)庫結(jié)果集和對象的對應(yīng)關(guān)系。sql可以重用的SQL塊,也可以被其他語句使用。insert用于映射插入語句。delete用于映射刪除語句。update用于映射更新語句。select用于映射查詢語句。<mapper>元素中namespace屬性作用

2.3.1MyBatis映射文件中的常用元素

namespace屬性有兩個作用:

用于區(qū)分不同的mapper,全局唯一。

綁定DAO接口,即面向接口編程。當(dāng)namespace綁定某一接口之后,可以不用寫該接口的實現(xiàn)類,MyBatis會通過接口的全限定名查找到對應(yīng)的mapper配置來執(zhí)行SQL語句,因此namespace的命名必須跟接口同名。2.3.1MyBatis映射文件中的常用元素<mapper>元素如何區(qū)別不同的XML文件

在不同的映射文件中,<mapper>元素的子元素的id可以相同,MyBatis通過<mapper>元素的namespace屬性值和子元素的id聯(lián)合區(qū)分不同的Mapper.xml文件。接口中的方法與映射文件中SQL語句id應(yīng)一一對應(yīng)。

2.3.2<select>元素先定一個小目標(biāo)!

先定一個小目標(biāo)!掌握Mybatis映射文件的<select>元素,能夠使用<select>元素執(zhí)行查詢操作<select>元素的查詢使用

2.3.2<select>元素

<select>元素用來映射查詢語句,它可以從數(shù)據(jù)庫中查詢數(shù)據(jù)并返回。使用<select>元素執(zhí)行查詢操作非常簡單,示例代碼如下:

<!—查詢操作--><selectid="findUserById"parameterType="Integer"resultType="com.itheima.pojo.User">select*fromuserswhereid=#{id}</select><select>元素的常用屬性2.3.2<select>元素屬性說明id表示命名空間中<select>元素的唯一標(biāo)識,通過該標(biāo)識可以調(diào)用這條查詢語句。parameterType它是一個可選屬性,用于指定SQL語句所需參數(shù)類的全限定名或者別名,其默認(rèn)值是unset。resultType用于指定執(zhí)行這條SQL語句返回的全限定類名或別名。resultMap表示外部resultMap的命名引用。resultMap和resultType不能同時使用。flushCache用于指定是否需要MyBatis清空本地緩存和二級緩存。<select>元素的常用屬性2.3.2<select>元素屬性說明useCache用于控制二級緩存的開啟和關(guān)閉。timeout用于設(shè)置超時時間,單位為秒。fetchSize獲取記錄的總條數(shù)設(shè)定,默認(rèn)值是unset。statementType用于設(shè)置MyBatis預(yù)處理類。resultSetType表示結(jié)果集的類型,它的默認(rèn)值是unset。2.3.3<insert>元素先定一個小目標(biāo)!

先定一個小目標(biāo)!掌握Mybatis映射文件的<insert>元素,能夠使用<insert>元素執(zhí)行插入操作<insert>元素的插入使用

2.3.3<insert>元素

<insert>元素用于映射插入語句,在執(zhí)行完<insert>元素中定義的SQL語句后,會返回插入記錄的數(shù)量。使用<insert>元素執(zhí)行插入操作非常簡單,示例代碼如下:<!—插入操作--><insertid="addUser"parameterType="com.itheima.pojo.User">insertintousers(uid,uname,uage)values(#{uid},#{uname},#{uage})</insert>數(shù)據(jù)庫獲取主鍵值的方式

2.3.3<insert>元素

很多時候,執(zhí)行插入操作后,需要獲取插入成功的數(shù)據(jù)生成的主鍵值,不同類型數(shù)據(jù)庫獲取主鍵值的方式不同,下面分別對支持主鍵自動增長的數(shù)據(jù)庫獲取主鍵值和不支持主鍵自動增長的數(shù)據(jù)庫獲取主鍵值的方式進行介紹。a.使用支持主鍵自動增長的數(shù)據(jù)庫獲取主鍵值2.3.3<insert>元素

如果使用的數(shù)據(jù)庫支持主鍵自動增長(如MySQL和SQLServer),那么可以通過keyProperty屬性指定POJO類的某個屬性接收主鍵返回值(通常會設(shè)置到id屬性上),然后將useGeneratedKeys的屬性值設(shè)置為true。<insertid="addUser"parameterType="com.itheima.pojo.User" keyProperty="uid"useGeneratedKeys="true"> insertinto users(uid,uname,uage)values(#{uid},#{uname},#{uage})</insert>b.使用不支持主鍵自動增長的數(shù)據(jù)庫獲取主鍵值2.3.3<insert>元素

使用MyBatis提供的<selectKey>元素來自定義主鍵。

在上述<selectKey>元素的屬性中,order屬性可以被設(shè)置為BEFORE或AFTER。如果設(shè)置為BEFORE,那么它會首先執(zhí)行<selectKey>元素中的配置來設(shè)置主鍵,然后執(zhí)行插入語句;如果設(shè)置為AFTER,那么它先執(zhí)行插入語句,然后執(zhí)行<selectKey>元素中的配置內(nèi)容。<selectKeykeyProperty="id” resultType="Integer"order="BEFORE” statementType="PREPARED">2.3.4<update>元素先定一個小目標(biāo)!

先定一個小目標(biāo)!掌握Mybatis映射文件的<update>元素,能夠使用<update>元素執(zhí)行更新操作<update>元素的更新使用

2.3.4<upda

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論