版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第10章MyBatis的注解開發(fā)《JavaEE企業(yè)級應(yīng)用開發(fā)教程(Spring+SpringMVC+MyBatis)》學(xué)習(xí)目標(biāo)/Target掌握一對一查詢,能夠基于注解實現(xiàn)一對一查詢掌握基于注解的單表增刪改查操作,能夠在程序中使用注解實現(xiàn)單表的增刪改查操作熟悉單表增刪改查的常見注解,能夠簡述常見注解對應(yīng)的作用掌握一對多查詢,能夠基于注解實現(xiàn)一對多查詢掌握多對多查詢,能夠基于注解實現(xiàn)多對多查詢章節(jié)概述/Summary傳統(tǒng)的MyBatis開發(fā)方式通常依賴于XML映射文件來定義SQL語句和結(jié)果集映射,隨著注解技術(shù)的不斷發(fā)展,MyBatis也提供了基于注解的開發(fā)方式。這種開發(fā)方式不僅簡化了配置過程,減少了XML映射文件的數(shù)量,還使得代碼更加清晰和易于維護(hù)。通過注解,開發(fā)者可以直接在Mapper接口的方法上定義SQL語句和結(jié)果集映射,從而實現(xiàn)了代碼與SQL語句的緊密結(jié)合。本章將對MyBatis的注解開發(fā)進(jìn)行講解。目錄/Contents10.110.2基于注解的單表增刪改查基于注解的關(guān)聯(lián)查詢基于注解的單表增刪改查10.110.1
基于注解的單表增刪改查在數(shù)據(jù)庫操作的日常實踐中,對單表進(jìn)行增刪改查是最基礎(chǔ)且頻繁的需求,MyBatis基于注解的開發(fā)方式,使得在進(jìn)行單表CRUD操作時,代碼更加精簡和清晰。下面,將對MyBatis增刪改查注解和基于注解的單表增刪改查操作進(jìn)行講解。10.1.1
單表增刪改查的常見注解先定一個小目標(biāo)!
先定一個小目標(biāo)!熟悉單表增刪改查的常見注解,能夠簡述常見注解對應(yīng)的作用10.1.1
單表增刪改查的常見注解單表增刪改查的常用注解主要包括SQL語句映射注解
、結(jié)果集映射注解、高級特性注解,下面分別對這三類注解進(jìn)行講解。1.SQL語句映射注解SQL語句映射注解是指在使用MyBatis進(jìn)行開發(fā)時,用于在Java代碼中定義SQL語句與Java方法之間映射關(guān)系的注解,這些注解可以標(biāo)記在方法和參數(shù)上,以指示MyBatis如何執(zhí)行相應(yīng)的數(shù)據(jù)庫操作。通過注解的方式,開發(fā)者可以直接在Java代碼中編寫SQL語句10.1.1
單表增刪改查的常見注解@Insert注解用于標(biāo)記插入操作的方法,可以在注解中編寫SQL插入語句,并使用#{}占位符引用方法參數(shù),示例如下。(1)@Insert注解@Insert("INSERTINTOusers(username,password)VALUES(#{username},#{password})")voidinsertUser(Useruser);10.1.1
單表增刪改查的常見注解@Param注解用于標(biāo)記方法參數(shù)在SQL語句中的占位符名稱。在使用MyBatis進(jìn)行開發(fā)時,有時候方法參數(shù)的名稱不能直接與SQL中的參數(shù)名稱對應(yīng),或者一個方法有多個參數(shù)需要傳遞給SQL語句,這時候就可以使用@Param注解來明確指定參數(shù)的名稱,以便正確將參數(shù)傳遞給SQL語句。(2)@Param注解10.1.1
單表增刪改查的常見注解@Update注解用于標(biāo)記更新操作的方法,可以在注解中編寫SQL更新語句,并使用#{}占位符引用方法參數(shù)。通常更新語句中會包含一個或多個條件,確保更新操作的針對性,示例如下。(3)@Update注解@Update("UPDATEusersSETpassword=#{newPassword}WHEREid=#{id}")voidupdateUserPassword(@Param("id")intuserId,@Param("newPassword")StringnewPassword);10.1.1
單表增刪改查的常見注解@Delete注解用于標(biāo)記刪除操作的方法,可以在注解中編寫SQL刪除語句,并使用#{}占位符引用方法參數(shù),示例如下。(4)@Delete注解@Delete("DELETEFROMusersWHEREid=#{id}")voiddeleteUser(@Param("id")intuserId);10.1.1
單表增刪改查的常見注解@Select注解用于標(biāo)記查詢操作的方法,可以直接在@Select注解中編寫SQL查詢語句,并使用#{}語法來引用方法中的參數(shù)。示例如下。(5)@Select注解@Select("SELECT*FROMusersWHEREid=#{id}")UsergetUserById(@Param("id")intuserId);10.1.1
單表增刪改查的常見注解2.結(jié)果集映射注解結(jié)果集映射注解是MyBatis中用于指定如何將查詢結(jié)果映射到Java對象的注解。在MyBatis中,可以使用@Results和@Result注解來定義結(jié)果映射。其中@Results注解用于定義多個結(jié)果映射規(guī)則,可以包含多個
@Result
注解,@Result注解用于定義單個Java對象屬性與數(shù)據(jù)表字段的映射關(guān)系。@Result注解提供了如下屬性設(shè)置Java對象屬性和數(shù)據(jù)表字段的映射關(guān)系。①property:用于指定實體類中對應(yīng)的屬性名。②column:用于指定查詢結(jié)果集中對應(yīng)的字段名。③one:用于指定描述一對一關(guān)聯(lián)關(guān)系的@One注解,關(guān)于@One注解會在本章后續(xù)詳細(xì)講解。④many:用于指定描述一對多關(guān)聯(lián)關(guān)系的@Many注解,關(guān)于@Many注解會在本章后續(xù)詳細(xì)講解。10.1.1
單表增刪改查的常見注解@Results和@Result注解的使用示例如下。@Select("SELECT*FROMusersWHEREid=#{id}")@Results({@Result(property="id",column="id"),@Result(property="username",column="username"),@Result(property="password",column="password"),@Result(property="email",column="email")})UsergetUserById(@Param("id")intuserId);10.1.1
單表增刪改查的常見注解3.高級特性注解@Options注解是MyBatis中用于配置一些高級選項的注解,例如是否使用生成的鍵、設(shè)置超時時間、是否刷新緩存等,常見的配置如下。①useGeneratedKeys:用于指定是否使用自動生成的主鍵。如果設(shè)置為true,表示會使用數(shù)據(jù)庫自動生成的鍵值作為主鍵;如果設(shè)置為false,表示不使用數(shù)據(jù)庫自動生成的鍵值,默認(rèn)為false。該屬性僅在執(zhí)行數(shù)據(jù)庫插入操作時生效。②keyProperty:用于指定生成的鍵將會被設(shè)置到哪個屬性上。③timeout:用于指定SQL語句執(zhí)行的超時時間,單位為秒。④flushCache:用于指定是否刷新緩存,如果設(shè)置為true,表示執(zhí)行該SQL語句后會刷新緩存,默認(rèn)為false。10.1.1
單表增刪改查的常見注解@Options注解通常與@Select、@Insert、@Update、@Delete等注解一起使用,標(biāo)注在映射器接口的方法之上,為SQL操作提供附加的執(zhí)行選項。下面通過一個示例演示@Options注解的使用。@Insert("INSERTINTOuser(username,password)VALUES(#{username},#{password})")@Options(useGeneratedKeys=true,keyProperty="id",timeout=30,flushCache=Options.FlushCachePolicy.TRUE)intinsertUser(Useruser);10.1.2基于注解的單表增刪改查操作先定一個小目標(biāo)!
先定一個小目標(biāo)!掌握基于注解的單表增刪改查操作,能夠在程序中使用注解實現(xiàn)單表的增刪改查操作10.1.2基于注解的單表增刪改查操作1.創(chuàng)建項目在IDEA中創(chuàng)建一個名稱為chapter10的Maven項目,并在項目的pom.xml文件中引入MyBatis、MySQL連接、單元測試的相關(guān)依賴。為了對比注解方式和XML映射文件方式的效果,本章將基于第8章8.6節(jié)的代碼演示基于注解的單表增刪改查操作。將第8章8.6節(jié)的源代碼復(fù)制到chapter10項目對應(yīng)的路徑下,稍微修改,修改后chapter10項目的目錄結(jié)構(gòu)如圖所示。學(xué)習(xí)完單表增刪改查的常見注解,下面通過案例演示基于注解的單表增刪改查操作。10.1.2基于注解的單表增刪改查操作2.修改Mapper接口在UserMapper接口原有的增刪改查方法上,使用注解方式進(jìn)行標(biāo)注。User數(shù)據(jù)表的字段名和User對象的屬性名一致,對此可以省略@Results注解指定結(jié)果集映射。同時查詢方法、插入方法、更新方法和刪除方法的參數(shù)都為一個,對此可以直接在SQL語句占位符中使用和參數(shù)名稱一致的標(biāo)記,簡化代碼。修改后UserMapper接口如文件10-1所示。文件10-1UserMapper.java源代碼10.1.2基于注解的單表增刪改查操作3.測試效果運(yùn)行MapperTest.java中的insertTest()方法,測試添加用戶信息王五的效果,如下圖所示。10.1.2基于注解的單表增刪改查操作3.測試效果在MapperTest.java中的selectTest()方法中設(shè)置查找id為2的用戶信息后,運(yùn)行selectTest()方法,效果如下圖所示。10.1.2基于注解的單表增刪改查操作3.測試效果在MapperTest.java中的updateUser()方法中設(shè)置更新用戶信息,傳遞更新的用戶信息中其id為4,名稱為王老五,并在更新用戶信息后調(diào)用findById()方法查找id為4的用戶信息,運(yùn)行updateUser()方法,如下圖所示。10.1.2基于注解的單表增刪改查操作3.測試效果在MapperTest.java中的deleteTest()方法中設(shè)置刪除id為4的用戶信息,并在刪除用戶信息后調(diào)用findById()方法查找id為4的用戶信息,運(yùn)行deleteTest()方法,如下圖所示?;谧⒔獾年P(guān)聯(lián)查詢10.210.2基于注解的關(guān)聯(lián)查詢MyBatis的注解開發(fā)中,除了可以實現(xiàn)單表的增刪改查操作外,還可以實現(xiàn)多表的關(guān)聯(lián)查詢,包括一對一查詢、一對多查詢和多對多查詢。下面對基于注解的關(guān)聯(lián)查詢進(jìn)行講解。10.2.1
一對一查詢先定一個小目標(biāo)!
先定一個小目標(biāo)!掌握一對一查詢,能夠基于注解實現(xiàn)一對一查詢10.2.1
一對一查詢MyBatis中使用@One注解實現(xiàn)數(shù)據(jù)表的一對一關(guān)聯(lián)查詢,通常與@Results注解一起使用。@One注解提供了一系列的屬性用于設(shè)置一對一關(guān)聯(lián)查詢時的細(xì)節(jié)信息,其中常見的屬性如下。①fetchType:用于指定控制關(guān)聯(lián)對象的加載策略,可選值有FetchType.EAGER(立即加載)和FetchType.LAZY(延遲加載),默認(rèn)為FetchType.EAGER。②select:用于指定關(guān)聯(lián)查詢的SQL語句或方法。10.2.1
一對一查詢1.修改Mapper接口在PersonMapper接口定義一個名為getIDCardByCardId()的方法,依據(jù)人員的id查詢與之匹配的身份證信息。以注解的方式修改查詢?nèi)藛T信息的方法getPersonById(),在該方法上使用@Select注解指定查詢的SQL語句,使用@Results注解定義查詢的結(jié)果集映射,并通過@One注解中的select屬性,將關(guān)聯(lián)查詢的方法指定為getIDCardByCardId(),從而進(jìn)行關(guān)聯(lián)查詢。修改后PersonMapper接口如文件10-2所示。文件10-2PersonMapper.java源代碼下面在10.1節(jié)實現(xiàn)的代碼上,基于注解實現(xiàn)查詢?nèi)藛T信息時,關(guān)聯(lián)查詢對應(yīng)的身份證信息。10.2.1
一對一查詢2.測試效果運(yùn)行MapperTest.java中的associationTest()方法,測試查詢id為1的人員信息,效果如下圖所示。10.2.2
一對多查詢先定一個小目標(biāo)!
先定一個小目標(biāo)!掌握一對多查詢,能夠基于注解實現(xiàn)一對多查詢10.2.2
一對多查詢在MyBatis中,@Many注解用于描述一對多關(guān)聯(lián)關(guān)系,即一個實體對象包含一個或多個與之關(guān)聯(lián)的子對象集合。@Many注解通常與@Results注解一起使用,常用于在查詢結(jié)果中嵌套加載一組關(guān)聯(lián)對象的集合。@Many注解的屬性和@One注解的屬性一致。10.2.2
一對多查詢1.修改Mapper接口在MemberMapper接口定義一個名為selectOrdersByMemberId()的方法,依據(jù)會員的id查詢與之匹配的訂單信息。以注解的方式修改查詢會員信息的方法getMemberWithOrders(),在該方法上使用@Select注解指定查詢的SQL語句,使用@Results注解定義查詢的結(jié)果集映射,并通過@Many注解中的select屬性,將關(guān)聯(lián)查詢的方法指定為selectOrdersByMemberId(),從而實現(xiàn)關(guān)聯(lián)查詢。修改后MemberMapper接口如文件10-3所示。文件10-3MemberMapper.java源代碼下面通過案例演示,使用注解實現(xiàn)查詢會員信息時,關(guān)聯(lián)查詢對應(yīng)的訂單信息。10.2.2
一對多查詢2.測試效果運(yùn)行MapperTest.java中的collectionTest()方法,測試查詢id為1的會員信息,效果如下圖所示。10.2.3
多對多查詢先定一個小目標(biāo)!
先定一個小目標(biāo)!掌握多對多查詢,能夠基于注解實現(xiàn)多對多查詢10.2.3
多對多查詢多對多關(guān)聯(lián)關(guān)系是數(shù)據(jù)庫設(shè)計中一種常見的實體關(guān)系類型,表示兩個實體之間存在著多個實例之間的多重關(guān)聯(lián)。為了有效地表示這種關(guān)系,我們通常采用一個中間表(也稱為關(guān)聯(lián)表或橋接表)來進(jìn)行維護(hù)。以學(xué)生和課程為例,一個學(xué)生可以選擇多門課程,同時一門課程也可以被多個學(xué)生選擇,這種典型的多對多關(guān)系就需要通過中間表來實現(xiàn)。中間表通常包含兩個外鍵,分別指向?qū)W生和課程表的主鍵,從而建立起兩者之間的關(guān)聯(lián)關(guān)系。通過這種方式,我們可以方便地查詢某個學(xué)生選擇的所有課程,或者某門課程的所有選課學(xué)生,實現(xiàn)數(shù)據(jù)的高效管理和查詢。10.2.3
多對多查詢1.數(shù)據(jù)庫數(shù)據(jù)準(zhǔn)備在名稱為mybatis的數(shù)據(jù)庫中,創(chuàng)建學(xué)生數(shù)據(jù)表student、課程數(shù)據(jù)表course、學(xué)生課程關(guān)聯(lián)表student_course,并插入若干測試數(shù)據(jù),具體代碼如下文件10-4所示。文件10-4manyToMany.sql源代碼MyBatis中沒有直接提供多對多關(guān)聯(lián)查詢的注解,通常根據(jù)需求由2個一對多關(guān)聯(lián)查詢實現(xiàn)多對多關(guān)聯(lián)查詢。下面基于注解實現(xiàn)學(xué)生和課程的多對多查詢。10.2.3
多對多查詢2.創(chuàng)建實體類在項目的com.itheima.entity包中創(chuàng)建與數(shù)據(jù)表student、course對應(yīng)的實體類Student和Course,用于存儲圖書信息,具體如文件10-5和文件10-6所示。文件10-5
Student.java文件10-6
Course.java源代碼10.2.3
多對多查詢3.創(chuàng)建Mapper接口在項目的com.itheima.mapper包中創(chuàng)建操作Student與數(shù)據(jù)庫數(shù)據(jù)映射的Mapper接口StudentMapper,在該接口中定義findById()方法用于根據(jù)學(xué)生id
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025河南新鄉(xiāng)封丘縣建勛學(xué)校招聘考試筆試參考題庫附答案解析
- 深度解析(2026)《GBT 26879-2025糧油儲藏 平房倉隔熱技術(shù)規(guī)范》(2026年)深度解析
- 2025年中國太平洋財產(chǎn)保險股份有限公司定西中心支公司招聘參考筆試題庫附答案解析
- 2025江西撫州市市屬國有企業(yè)招聘員工市國威安保服務(wù)有限公司押運(yùn)員體能測評參考考試題庫及答案解析
- 深度解析(2026)《GBT 25836-2010微量硬度快速測定方法》(2026年)深度解析
- 2025江蘇蘇州交投建設(shè)管理有限公司招聘10人備考筆試題庫及答案解析
- 2025寧夏閩寧鄉(xiāng)村振興培訓(xùn)中心招聘2人參考考試試題及答案解析
- 2026江西銅業(yè)建設(shè)監(jiān)理咨詢有限公司社會招聘1人參考筆試題庫附答案解析
- 2025金華義烏市屬國有企業(yè)解說員公開招聘6人參考筆試題庫附答案解析
- 2025云南昆明市團(tuán)結(jié)街道辦事處招聘公益性崗位人員2人參考筆試題庫附答案解析
- DL-T 606.4-2018 火力發(fā)電廠能量平衡導(dǎo)則 第4部分:電平衡
- 《普通心理學(xué)課程論文3600字(論文)》
- GB/T 5209-1985色漆和清漆耐水性的測定浸水法
- 12YJ6 外裝修標(biāo)準(zhǔn)圖集
- GB/T 14388-2010木工硬質(zhì)合金圓鋸片
- 大三上學(xué)期-免疫學(xué)第11章
- 《彈性波動力學(xué)》課程教學(xué)大綱
- 關(guān)于績效考核與績效工資分配工作的通知模板
- 2023第九屆希望杯初賽六年級(含解析)
- OpenStack云計算平臺實戰(zhàn)課件(完整版)
- 中醫(yī)舌象舌診PPT課件
評論
0/150
提交評論