Spring Boot企業(yè)級開發(fā)教程(第2版) 課件 第5章 Spring Boot數(shù)據(jù)訪問_第1頁
Spring Boot企業(yè)級開發(fā)教程(第2版) 課件 第5章 Spring Boot數(shù)據(jù)訪問_第2頁
Spring Boot企業(yè)級開發(fā)教程(第2版) 課件 第5章 Spring Boot數(shù)據(jù)訪問_第3頁
Spring Boot企業(yè)級開發(fā)教程(第2版) 課件 第5章 Spring Boot數(shù)據(jù)訪問_第4頁
Spring Boot企業(yè)級開發(fā)教程(第2版) 課件 第5章 Spring Boot數(shù)據(jù)訪問_第5頁
已閱讀5頁,還剩124頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第5章SpringBoot數(shù)據(jù)訪問《SpringBoot企業(yè)級開發(fā)教程(第2版)》學(xué)習(xí)目標(biāo)/Target熟悉SpringData概述,能夠說出SpringData的項目結(jié)構(gòu)和SpringData的常用核心子接口了解SpringDataJPA概述,能夠說出使用SpringDataJPA進行數(shù)據(jù)訪問的邏輯掌握SpringDataJPA快速入門,能夠根據(jù)方法命名規(guī)則定義的方法、JPQL,以及原生SQL的方式操作數(shù)據(jù)庫中的數(shù)據(jù)掌握SpringBoot整合SpringDataJPA,能夠整合SpringBoot和SpringDataJPA,并使用SpringDataJPA進行基本的增刪改查了解MyBatis-Plus概述,能夠說出MyBatis-Plus的特性學(xué)習(xí)目標(biāo)/Target掌握MyBatis-Plus快速入門,能夠使用通用Mapper、通用Service,以及條件構(gòu)造器操作數(shù)據(jù)庫中的數(shù)據(jù)掌握SpringBoot整合MyBatis-Plus,能夠整合SpringBoot和MyBatis-Plus,并使用MyBatis-Plus進行基本的增刪改查熟悉Redis快速入門,能夠說出Redis的概念和優(yōu)點、安裝和啟動Redis的方法、以及說出Redis支持的數(shù)據(jù)類型掌握SpringDataRedis快速入門,能夠說出SpringDataRedis的特性,以及應(yīng)用SpringDataRedis的常見操作掌握SpringBoot整合Redis,能夠整合SpringBoot和Redis,并使用SpringDataRedis向Redis中存儲和讀取數(shù)據(jù)章節(jié)概述/Summary一般情況下,應(yīng)用程序中的數(shù)據(jù)都會使用數(shù)據(jù)庫進行存儲和管理,然后在應(yīng)用程序中對數(shù)據(jù)庫中的數(shù)據(jù)進行訪問操作。SpringBoot在簡化項目開發(fā)以及實現(xiàn)自動化配置的基礎(chǔ)上,對常見的數(shù)據(jù)層解決方案提供了非常好的支持,用戶只需要進行簡單的配置,就可以使用數(shù)據(jù)庫訪問技術(shù)對數(shù)據(jù)庫進行數(shù)據(jù)訪問。下面將對SpringBoot項目中訪問數(shù)據(jù)庫的常用技術(shù)進行講解。目錄/Contents5.15.2SpringData概述SpringBoot管理SpringMVC5.3文件上傳5.3文件上傳SpringData概述5.15.1

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

先定一個小目標(biāo)!熟悉SpringData概述,能夠說出SpringData的項目結(jié)構(gòu)和SpringData的常用核心子接口5.1

SpringData概述SpringBoot默認(rèn)采用整合SpringData的方式統(tǒng)一處理數(shù)據(jù)訪問層,SpringData是Spring提供的開源框架,旨在統(tǒng)一和簡化對各種類型數(shù)據(jù)庫的持久化存儲。SpringData為大量的關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫提供了數(shù)據(jù)訪問的方案,并且提供了基于Spring的數(shù)據(jù)訪問模型,同時保留了各存儲系統(tǒng)的特殊性。5.1

SpringData概述SpringData為開發(fā)者提供了一套統(tǒng)一的API,開發(fā)者也可以相同的一套API操作不同存儲系統(tǒng)中的數(shù)據(jù),保持代碼結(jié)構(gòu)的一致性,大大減少開發(fā)工作量,提高開發(fā)效率。5.1

SpringData概述SpringData提供了一套統(tǒng)一的Repository接口實現(xiàn)方式,包括基本的增刪改查操作、條件查詢、排序查詢、分頁查詢等。當(dāng)數(shù)據(jù)訪問對象需要進行增刪改查、排序查詢和分頁查詢等操作時,開發(fā)者僅需要按照一定的規(guī)范聲明接口即可,不需要實現(xiàn)具體的查詢方法。SpringData會根據(jù)底層數(shù)據(jù)存儲系統(tǒng),在運行時自動實現(xiàn)真正的查詢方法,執(zhí)行查詢操作,返回結(jié)果數(shù)據(jù)集。5.1

SpringData概述Repository接口:Repository是一個空接口,用于標(biāo)示。CrudRepository接口:提供了各種增刪改查方法。PagingAndSortingRepository接口:增加了分頁和排序功能的方法。QueryByExampleExecutor接口:是進行條件封裝查詢的頂級父接口,允許通過Example實例執(zhí)行復(fù)雜條件查詢。JpaRepository接口:重寫了一些查找和刪除的方法。SpringBoot整合SpringDataJPA5.25.2

SpringBoot整合SpringDataJPASpringData作為Spring全家桶中重要的一員,在Spring項目全球使用市場份額排名中多次居前位,而在SpringData子項目的使用份額排名中,SpringDataJPA也一直名列前茅。SpringBoot為SpringDataJPA提供了啟動器,使SpringDataJPA在SpringBoot項目中的使用更加便利。下面將對SpringDataJPA的相關(guān)知識,以及SpringBoot整合SpringDataJPA進行講解。5.2.1

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

先定一個小目標(biāo)!了解SpringDataJPA概述,能夠說出使用SpringDataJPA進行數(shù)據(jù)訪問的邏輯5.2.1

SpringDataJPA概述對象關(guān)系映射(ObjectRelationalMapping,ORM)框架在運行時可以參照映射文件的信息,把對象持久化到數(shù)據(jù)庫中,可以解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫存在的互不匹配的現(xiàn)象,常見的ORM框架有Hibernate、OpenJPA等。ORM框架的出現(xiàn),使開發(fā)者從數(shù)據(jù)庫編程中解脫出來,把更多的精力放在業(yè)務(wù)模型與業(yè)務(wù)邏輯上,但各ORM框架之間的API差別很大,使用了某種ORM框架的系統(tǒng)會嚴(yán)重受限于該ORM的標(biāo)準(zhǔn),基于此,SUN公司提出JPA(JavaPersistenceAPI,Java持久化API)。5.2.1

SpringDataJPA概述JPA是Sun官方提出的Java持久化規(guī)范,用于描述對象和關(guān)系表的映射關(guān)系,并將運行期的實體對象持久化到數(shù)據(jù)庫中。JPA規(guī)范本質(zhì)上是一套規(guī)范,它提供了一些編程的API接口,但具體實現(xiàn)則由服務(wù)廠商來提供基于JPA的數(shù)據(jù)訪問。5.2.1

SpringDataJPA概述SpringDataJPA整體處理邏輯5.2.2SpringDataJPA快速入門先定一個小目標(biāo)!

先定一個小目標(biāo)!掌握SpringDataJPA快速入門,能夠根據(jù)方法命名規(guī)則定義的方法、JPQL,以及原生SQL的方式操作數(shù)據(jù)庫中的數(shù)據(jù)5.2.2SpringDataJPA快速入門SpringDataJPA提供了很多模板代碼,易于擴展,可以大幅提高開發(fā)效率,使開發(fā)者用極簡的代碼即可實現(xiàn)對數(shù)據(jù)的訪問。使用SpringDataJPA可以通過Repository接口中的方法對數(shù)據(jù)庫中的數(shù)據(jù)進行增刪改查,也可以根據(jù)方法命名規(guī)則定義的方法、JPQL,以及原生SQL的方式進行操作,下面對SpringDataJPA提供的這些基本功能進行講解。5.2.2SpringDataJPA快速入門如果自定義接口繼承了JpaRepository接口,則可以直接使用JpaRepository接口提供的方法。1.父接口的方法5.2.2SpringDataJPA快速入門SpringData中按照框架的規(guī)范自定義了Repository接口,除了可以使用接口提供的默認(rèn)方法外,還可以按特定規(guī)則來定義查詢方法,只要這些查詢方法的方法名遵守特定的規(guī)則,不需要提供方法實現(xiàn)體,SpringData就會自動為這些方法生成查詢語句。SpringData對這種特定的查詢方法的定義規(guī)范如下。以find、read、get、query、count開頭。涉及查詢條件時,條件的屬性使用條件關(guān)鍵字連接,并且條件屬性的首字母大寫。2.根據(jù)方法命名規(guī)則定義方法5.2.2SpringDataJPA快速入門根據(jù)方法命名規(guī)范查詢時,有時候需要使用關(guān)鍵字對查詢條件的屬性進行連接。2.根據(jù)方法命名規(guī)則定義方法關(guān)鍵字方法名示例對應(yīng)的JPQL片段AndfindByLastnameAndFirstname()…wherex.lastname=?1andx.firstname=?2OrfindByLastnameOrFirstname()…wherex.lastname=?1orx.firstname=?2Is,EqualsfindByFirstname,findByFirstnameIs,findByFirstnameEquals()…wherex.firstname=?1BetweenfindByStartDateBetween()…wherex.startDatebetween?1and?2根據(jù)方法命名規(guī)則定義方法所支持的關(guān)鍵字5.2.2SpringDataJPA快速入門根據(jù)方法命名規(guī)范查詢時,有時候需要使用關(guān)鍵字對查詢條件的屬性進行連接。2.根據(jù)方法命名規(guī)則定義方法關(guān)鍵字方法名示例對應(yīng)的JPQL片段AndfindByLastnameAndFirstname()…wherex.lastname=?1andx.firstname=?2OrfindByLastnameOrFirstname()…wherex.lastname=?1orx.firstname=?2Is,EqualsfindByFirstname,findByFirstnameIs,findByFirstnameEquals()…wherex.firstname=?1BetweenfindByStartDateBetween()…wherex.startDatebetween?1and?2根據(jù)方法命名規(guī)則定義方法所支持的關(guān)鍵字5.2.2SpringDataJPA快速入門2.根據(jù)方法命名規(guī)則定義方法關(guān)鍵字方法名示例對應(yīng)的JPQL片段LessThanfindByAgeLessThan()…wherex.age<?1LessThanEqualfindByAgeLessThanEqual()…wherex.age<=?1GreaterThanfindByAgeGreaterThan()…wherex.age>?1GreaterThanEqualfindByAgeGreaterThanEqual()…wherex.age>=?1AfterfindByStartDateAfter()…wherex.startDate>?1BeforefindByStartDateBefore()…wherex.startDate<?1IsNullfindByAgeIsNull()…wherex.ageisnullIsNotNullfindByAgeIsNotNull()…wherex.ageisnotnullNotNullfindByAgeNotNull()…wherex.agenotnull根據(jù)方法命名規(guī)則定義方法所支持的關(guān)鍵字5.2.2SpringDataJPA快速入門2.根據(jù)方法命名規(guī)則定義方法關(guān)鍵字方法名示例對應(yīng)的JPQL片段LikefindByFirstnameLike()…wherex.firstnamelike?1NotLikefindByFirstnameNotLike()…wherex.firstnamenotlike?1StartingWithfindByFirstnameStartingWith()…wherex.firstnamelike?1(綁定參數(shù)%)EndingWithfindByFirstnameEndingWith()…wherex.firstnamelike?1(綁定參數(shù)%)ContainingfindByFirstnameContaining()…wherex.firstnamelike?1(綁定參數(shù)%)OrderByfindByAgeOrderByLastnameDesc()…wherex.age=?1orderbyx.lastnamedesc根據(jù)方法命名規(guī)則定義方法所支持的關(guān)鍵字5.2.2SpringDataJPA快速入門2.根據(jù)方法命名規(guī)則定義方法關(guān)鍵字方法名示例對應(yīng)的JPQL片段NotfindByLastnameNot()…wherex.lastname<>?1InfindByAgeIn(Collection<Age>ages)…wherex.agein?1NotInfindByAgeNotIn(Collection<Age>ages) …wherex.agenot

in?1TruefindByActiveTrue()…wherex.active=trueFalsefindByActiveFalse()…wherex.active=falseIgnoreCasefindByFirstnameIgnoreCase()…whereUPPER(x.firstame)=UPPER(?1)根據(jù)方法命名規(guī)則定義方法所支持的關(guān)鍵字5.2.2SpringDataJPA快速入門3.JPQL使用SpringDataJPA提供的查詢方法已經(jīng)可以滿足大部分應(yīng)用場景的需求,但是有些業(yè)務(wù)需要更靈活的查詢條件,這時就可以使用@Query注解,結(jié)合JPQL的方式來完成查詢。JPQL是JPA中定義的一種查詢語言,此種語言旨在讓開發(fā)者忽略數(shù)據(jù)庫表和表中的字段,而關(guān)注實體類及實體類中的屬性。JPQL語句的寫法和SQL語句的寫法十分類似,但是要把查詢的表名換成實體類名稱,把表中的字段名換成實體類的屬性名稱。5.2.2SpringDataJPA快速入門3.JPQLJPQL支持命名參數(shù)和位置參數(shù)兩種查詢參數(shù)。命名參數(shù):在方法的參數(shù)列表中,使用@Param注解標(biāo)注參數(shù)的名稱,在@Query注解的查詢語句中,使用“:參數(shù)名稱”匹配參數(shù)名稱。位置參數(shù):在@Query注解的查詢語句中,使用“?位置編號的數(shù)值”匹配參數(shù),查詢語句中參數(shù)標(biāo)注的編號需要和方法的參數(shù)列表中參數(shù)的順序依次對應(yīng)。//命名參數(shù)綁定@Query("fromBookbwhereb.author=:authorand=:name")List<Book>findByCondition1(@Param("author")Stringauthor,@Param("name")Stringname);//位置參數(shù)綁定@Query("fromBookbwhereb.author=?1and=?2")List<Book>findByCondition2(Stringauthor,Stringname);5.2.2SpringDataJPA快速入門3.JPQLJPQL中使用like模糊查詢、排序查詢、分頁查詢子句時,其用法與SQL中的用法相同,區(qū)別在于JPQL處理的類的實例不同。//like模糊查詢@Query("fromBookbwherelike%:name%")List<Book>findByCondition3(@Param("name")Stringname);//排序查詢@Query("fromBookbwherelike%:name%orderbyiddesc")List<Book>findByCondition4(@Param("name")Stringname);//分頁查詢@Query("fromBookbwherelike%:name%")Page<Book>findByCondition5(Pageablepageable,@Param("name")Stringname);5.2.2SpringDataJPA快速入門3.JPQLJPQL中除了可以使用字符串和基本數(shù)據(jù)類型的數(shù)據(jù)作為參數(shù)外,還可以使用集合和Bean作為參數(shù),傳入Bean進行查詢時可以在JPQL中使用SpEL表達式接收變量。//傳入集合參數(shù)查詢@Query("fromBookbwhereb.idin:ids")List<Book>findByCondition6(@Param("ids")Collection<String>ids);//傳入Bean進行查詢(使用SPEL表達式)@Query("fromBookbwhereb.author=:#{#Book.author}and"+"=:#{#B}")BookfindByCondition7(@Param("Book")BookBook);5.2.2SpringDataJPA快速入門4.原生SQL如果出現(xiàn)非常復(fù)雜的業(yè)務(wù)情況,導(dǎo)致JPQL和其他查詢都無法實現(xiàn)對應(yīng)的查詢,需要自定義SQL進行查詢時,可以在@Query注解中定義該SQL。@Query注解中定義的是原生SQL時,需要在注解使用nativeQuery=true指定執(zhí)行的查詢語句為原生SQL,否則會將其當(dāng)作JPQL執(zhí)行@Query(value="SELECT*FROMbookWHEREid=:id",nativeQuery=true)BookfindByCondition8(@Param("id")Integerid);5.2.2SpringDataJPA快速入門使用@Query注解可以執(zhí)行JPQL和原生SQL查詢,但是@Query注解無法進行DML數(shù)據(jù)操縱語言,主要語句有INSERT、DELETE和UPDATE操作,如果需要更新數(shù)據(jù)庫中的數(shù)據(jù),需要在對應(yīng)的方法上標(biāo)注@Modifying注解,以通知SpringData當(dāng)前需要進行的是DML操作。需要注意的是JPQL只支持DELETE和UPDATE操作,不支持INSERT操作。小提示5.2.3

整合SpringDataJPA先定一個小目標(biāo)!

先定一個小目標(biāo)!掌握SpringBoot整合SpringDataJPA,能夠整合SpringBoot和SpringDataJPA,并使用SpringDataJPA進行基本的增刪改查5.2.3

整合SpringDataJPA下面使用SpringBoot和SpringDataJPA進行整合,進一步演示SpringDataJPA在SpringBoot項目中的基本使用。1.創(chuàng)建項目在IDEA中創(chuàng)建SpringBoot項目chapter05,讀者可以根據(jù)自己當(dāng)前情況選擇使用SpringInitializr方式或者Maven方式進行創(chuàng)建,這里使用Maven方式創(chuàng)建項目。5.2.3

整合SpringDataJPA2.配置依賴在項目chapter05的pom.xml文件中配置SpringBoot整合SpringDataJPA的依賴,包括SpringBoot父工程的依賴、MySQL驅(qū)動依賴和SpringDataJPA的啟動器依賴,具體如文件5-1所示。文件5-1pom.xml源代碼5.2.3

整合SpringDataJPA3.設(shè)置配置信息使用SpringDataJPA需要操作數(shù)據(jù)庫,所以需要在項目中設(shè)置一些和數(shù)據(jù)庫連接相關(guān)的配置信息。SpringBoot的自動裝配提供了數(shù)據(jù)庫連接的一些默認(rèn)配置,例如數(shù)據(jù)源。SpringBoot2.x版本默認(rèn)使用HikariCP作為數(shù)據(jù)源,如果沒有顯示指定使用其他數(shù)據(jù)源,項目啟動后會自動使用HikariCP數(shù)據(jù)源獲取數(shù)據(jù)庫連接。引入SpringDataJPA的啟動器后,SpringBoot會自動裝配對于JPA的默認(rèn)配置,例如是否打印運行時的SQL語句和參數(shù)信息、是否根據(jù)實體自動建表等。本項目選擇采用默認(rèn)的數(shù)據(jù)源,JPA的配置信息只修改打印運行時的SQL語句,其他都采用默認(rèn)的配置信息。5.2.3

整合SpringDataJPA3.設(shè)置配置信息在項目的resources目錄下創(chuàng)建application.yml文件,在該文件中指定數(shù)據(jù)庫連接信息和JPA的配置信息,具體如文件5-2所示。文件5-2application.yml源代碼5.2.3

整合SpringDataJPA4.創(chuàng)建實體類通過JPA可以簡單高效地管理Java實體類和關(guān)系數(shù)據(jù)庫的映射,通常每個實體類與數(shù)據(jù)庫中的單個數(shù)據(jù)表相關(guān)聯(lián),每個實體的實例表示數(shù)據(jù)庫表格中的某一行記錄。在項目的java目錄下創(chuàng)建包com.itheima.chapter05.entity,并在該包下創(chuàng)建實體類Book,具體如文件5-3所示。文件5-3Book.java源代碼5.2.3

整合SpringDataJPA5.自定義Repository接口通過JPA可以簡單高效的管理Java實體類和關(guān)系數(shù)據(jù)庫的映射,通常每個實體類與數(shù)據(jù)庫中的單個數(shù)在java目錄下創(chuàng)建包com.itheima.chapter05.dao,在該包下自定義接口BookRepository繼承JpaRepository接口,并在BookRepository接口中添加操作數(shù)據(jù)庫中圖書信息的方法,具體如文件5-4所示。文件5-4BookRepository.java源代碼5.2.3

整合SpringDataJPA6.創(chuàng)建數(shù)據(jù)庫至此,實體類和操作實體的接口都已經(jīng)定義好,因為沒有在JPA的配置信息中設(shè)置項目啟動時根據(jù)實體類自動創(chuàng)建數(shù)據(jù)表,此時測試對圖書信息的操作需要先創(chuàng)建對應(yīng)的數(shù)據(jù)庫和數(shù)據(jù)表,并插入對應(yīng)的測試數(shù)據(jù),相關(guān)SQL如文件5-5所示。文件5-5book.sql源代碼5.2.3

整合SpringDataJPA7.創(chuàng)建項目啟動類和測試類在src\main\java目錄的com.itheima.chapter05包下創(chuàng)建項目啟動類Chapter05Application,具體如文件5-6所示。文件5-6Chapter05Application.java源代碼5.2.3

整合SpringDataJPA7.創(chuàng)建項目啟動類和測試類在src\test\java目錄下創(chuàng)建包com.itheima.chapter05,并在該包下創(chuàng)建測試類Chapter05ApplicationTests。在Chapter05ApplicationTests測試類中定義操作圖書信息的測試方法,具體如文件5-7所示。文件5-7Chapter05ApplicationTests.java源代碼5.2.3

整合SpringDataJPA8.測試操作圖書信息運行文件5-7中的saveBook()方法,測試新增圖書信息。5.2.3

整合SpringDataJPA8.測試操作圖書信息運行文件5-7中的editBook()方法,測試修改圖書信息。5.2.3

整合SpringDataJPA8.測試操作圖書信息運行文件5-7中的findBook()方法,測試查詢圖書信息。5.2.3

整合SpringDataJPA8.測試操作圖書信息運行文件5-7中的delBook()方法,測試刪除圖書信息。SpringBoot整合MyBatis-Plus5.35.3SpringBoot整合MyBatis-PlusMyBatis是一個足夠靈活的DAO層解決方案,但其也存在一些不足。為了彌補這些不足,可以對MyBatis現(xiàn)有的功能進行增強,Mybatis-Plus就是這樣的MyBatis增強工具。下面將對Mybatis-Plus的相關(guān)基礎(chǔ)知識和SpringBoot整合Mybatis-Plus進行講解。5.3.1

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

先定一個小目標(biāo)!了解MyBatis-Plus概述,能夠說出MyBatis-Plus的特性5.3.1

MyBatis-Plus概述MyBatis是半自動化的ORM實現(xiàn),支持定制化SQL、存儲過程和高級映射,其封裝性低于Hibernate,但性能優(yōu)秀、小巧、簡單易學(xué),在國內(nèi)備受開發(fā)人員的喜愛。MyBatis本身也存在些許不足,例如,配置文件繁多,以及當(dāng)編寫一個業(yè)務(wù)邏輯時需要在Dao層寫一個方法,再創(chuàng)建一個與之對應(yīng)的映射文件或SQL語句。針對MyBatis的這些不足,MyBatis-Plus誕生了。MyBatis-Plus是MyBatis的增強工具,在MyBatis的基礎(chǔ)上只做增強不做改變,支持MyBatis所有原生的特性,旨在簡化開發(fā)、提高效率。5.3.1

MyBatis-Plus概述MyBatis-Plus除了彌補了MyBatis的些許不足外,還具有以下特性。無侵入:只做增強不做改變,引入它不會對現(xiàn)有工程產(chǎn)生影響。損耗小:啟動即會自動注入基本增刪改查方法,性能基本無損耗,直接面向?qū)ο蟛僮?。強大的增刪改查操作:內(nèi)置通用Mapper、通用Service,僅僅通過少量配置即可實現(xiàn)單表大部分增刪改查操作,具有強大的條件構(gòu)造器,可滿足各類使用需求。支持Lambda形式調(diào)用:通過Lambda表達式,可方便地編寫各類查詢條件,無須再擔(dān)心字段寫錯。支持主鍵自動生成:支持分布式唯一ID生成器Sequence在內(nèi)的4種主鍵策略,可自由配置,完美解決了主鍵問題。支持ActiveRecord模式:支持ActiveRecord形式調(diào)用,實體類只需繼承Model類即可進行強大的增刪改查操作。5.3.1

MyBatis-Plus概述支持自定義全局通用操作:支持全局通用方法注入。內(nèi)置代碼生成器:采用代碼或者Maven插件可快速生成Mapper、Model、Service、Controller層代碼,支持模板引擎。內(nèi)置分頁插件:基于MyBatis物理分頁,開發(fā)者無須關(guān)心具體操作,配置好插件之后,寫分頁等同于普通List查詢。分頁插件支持多種數(shù)據(jù)庫:支持MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer等多種數(shù)據(jù)庫。內(nèi)置性能分析插件:可輸出SQL語句以及其執(zhí)行時間,建議開發(fā)測試時啟用該功能,能快速揪出慢查詢。內(nèi)置全局?jǐn)r截插件:提供全表delete、update操作智能分析阻斷,也可自定義攔截規(guī)則,預(yù)防誤操作。5.3.1

MyBatis-Plus概述5.3.2

MyBatis-Plus快速入門先定一個小目標(biāo)!

先定一個小目標(biāo)!掌握MyBatis-Plus快速入門,能夠使用通用Mapper、通用Service,以及條件構(gòu)造器操作數(shù)據(jù)庫中的數(shù)據(jù)5.3.2

MyBatis-Plus快速入門通過學(xué)習(xí)MyBatis-Plus的特性可知,MyBatis-Plus內(nèi)置了通用Mapper和通用Service,啟動時會自動注入基本的增刪改查方法,并提供了強大的條件構(gòu)造器,下面對MyBatis-Plus的這些基本功能進行講解。1.通用MapperMyBatis-Plus的通用Mapper是指其BaseMapper接口,Mybatis-Plus啟動時自動解析,將實體表關(guān)系映射轉(zhuǎn)換為Mybatis內(nèi)部對象注入到容器中。BaseMapper接口中封裝了基本的增刪改查方法。(1)新增方法intinsert(Tentity);5.3.2

MyBatis-Plus快速入門1.通用Mapper(2)更新方法//根據(jù)whereWrapper條件,更新記錄intupdate(@Param(Constants.ENTITY)TupdateEntity,@Param(Constants.WRAPPER)Wrapper<T>whereWrapper);//根據(jù)ID更新intupdateById(@Param(Constants.ENTITY)Tentity);5.3.2

MyBatis-Plus快速入門1.通用Mapper(3)刪除方法//根據(jù)entity條件,刪除記錄intdelete(@Param(Constants.WRAPPER)Wrapper<T>wrapper);//根據(jù)ID批量刪除intdeleteBatchIds(@Param(Constants.COLLECTION)Collection<?extendsSerializable>idList);//根據(jù)ID刪除intdeleteById(Serializableid);//根據(jù)columnMap條件,刪除記錄intdeleteByMap(@Param(Constants.COLUMN_MAP)Map<String,Object>columnMap);5.3.2

MyBatis-Plus快速入門1.通用Mapper(4)查詢方法//根據(jù)id查詢TselectById(Serializableid);//根據(jù)entity條件,查詢一條記錄TselectOne(@Param(Constants.WRAPPER)Wrapper<T>queryWrapper);//根據(jù)id批量查詢List<T>selectBatchIds(@Param(Constants.COLLECTION)Collection<?extendsSerializable>idList);//根據(jù)entity條件,查詢?nèi)坑涗汱ist<T>selectList(@Param(Constants.WRAPPER)Wrapper<T>queryWrapper);//根據(jù)columnMap條件進行查詢List<T>selectByMap(@Param(Constants.COLUMN_MAP)Map<String,Object>columnMap);5.3.2

MyBatis-Plus快速入門1.通用Mapper(4)查詢方法//根據(jù)Wrapper條件,查詢?nèi)坑涗汱ist<Map<String,Object>>selectMaps(@Param(Constants.WRAPPER)Wrapper<T>queryWrapper);//根據(jù)Wrapper條件,查詢?nèi)坑涗?。注意:只返回第一個字段的值List<Object>selectObjs(@Param(Constants.WRAPPER)Wrapper<T>queryWrapper);//根據(jù)entity條件,查詢?nèi)坑涗洸⒎揑Page<T>selectPage(IPage<T>page,@Param(Constants.WRAPPER)Wrapper<T>queryWrapper);//根據(jù)Wrapper條件,查詢?nèi)坑涗洸⒎揑Page<Map<String,Object>>selectMapsPage(IPage<T>page,@Param(Constants.WRAPPER)Wrapper<T>queryWrapper);//根據(jù)Wrapper條件,查詢總記錄數(shù)IntegerselectCount(@Param(Constants.WRAPPER)Wrapper<T>queryWrapper);5.3.2

MyBatis-Plus快速入門2.通用Service除了通用Mapper,MyBatis-Plus還提供了通用Service,通用Service指的是其IService接口,該接口中也提供了基本的增刪改查方法。編寫Service層代碼時,可以使用自定義的Service接口繼承IService接口,調(diào)用IService接口中的方法時,不需要手動實現(xiàn),即可實現(xiàn)基本的增刪改查功能。(1)插入方法//插入一條記錄booleansave(Tentity);//批量插入booleansaveBatch(Collection<T>entityList);//批量插入booleansaveBatch(Collection<T>entityList,intbatchSize);5.3.2

MyBatis-Plus快速入門2.通用Service(2)更新方法//根據(jù)UpdateWrapper條件,更新記錄需要設(shè)置sqlsetbooleanupdate(Wrapper<T>updateWrapper);//根據(jù)whereWrapper條件,更新記錄booleanupdate(TupdateEntity,Wrapper<T>whereWrapper);//根據(jù)ID選擇修改booleanupdateById(Tentity);//根據(jù)ID批量更新booleanupdateBatchById(Collection<T>entityList);//根據(jù)ID批量更新booleanupdateBatchById(Collection<T>entityList,intbatchSize);5.3.2

MyBatis-Plus快速入門2.通用Service(3)插入或更新方法//主鍵存在就更新記錄,否則插入一條記錄booleansaveOrUpdate(Tentity);//根據(jù)updateWrapper嘗試更新,否繼續(xù)執(zhí)行saveOrUpdate(T)方法booleansaveOrUpdate(Tentity,Wrapper<T>updateWrapper);//批量插入或更新booleansaveOrUpdateBatch(Collection<T>entityList);//批量插入或更新booleansaveOrUpdateBatch(Collection<T>entityList,intbatchSize);5.3.2

MyBatis-Plus快速入門2.通用Service(4)刪除方法//根據(jù)entity條件,刪除記錄booleanremove(Wrapper<T>queryWrapper);//根據(jù)id刪除booleanremoveById(Serializableid);//根據(jù)columnMap條件,刪除記錄booleanremoveByMap(Map<String,Object>columnMap);//根據(jù)id批量刪除booleanremoveByIds(Collection<?extendsSerializable>idList);5.3.2

MyBatis-Plus快速入門2.通用Service(5)查詢方法//根據(jù)ID查詢TgetById(Serializableid);//根據(jù)Wrapper,查詢一條記錄。結(jié)果集,如果是多個會拋出異常TgetOne(Wrapper<T>queryWrapper);//根據(jù)Wrapper,查詢一條記錄TgetOne(Wrapper<T>queryWrapper,booleanthrowEx);//根據(jù)Wrapper,查詢一條記錄Map<String,Object>getMap(Wrapper<T>queryWrapper);//根據(jù)Wrapper,查詢一條記錄<V>VgetObj(Wrapper<T>queryWrapper,Function<?superObject,V>mapper);5.3.2

MyBatis-Plus快速入門2.通用Service(5)查詢方法//查詢所有List<T>list();//查詢列表List<T>list(Wrapper<T>queryWrapper);//查詢(根據(jù)ID批量查詢)Collection<T>listByIds(Collection<?extendsSerializable>idList);//查詢(根據(jù)columnMap條件)Collection<T>listByMap(Map<String,Object>columnMap);//查詢所有列表List<Map<String,Object>>listMaps();5.3.2

MyBatis-Plus快速入門2.通用Service(5)查詢方法//查詢列表List<Map<String,Object>>listMaps(Wrapper<T>queryWrapper);//查詢?nèi)坑涗汱ist<Object>listObjs();//查詢?nèi)坑涗?lt;V>List<V>listObjs(Function<?superObject,V>mapper);//根據(jù)Wrapper條件,查詢?nèi)坑涗汱ist<Object>listObjs(Wrapper<T>queryWrapper);5.3.2

MyBatis-Plus快速入門2.通用Service(6)分頁查詢方法//無條件分頁查詢IPage<T>page(IPage<T>page);//條件分頁查詢IPage<T>page(IPage<T>page,Wrapper<T>queryWrapper);//無條件分頁查詢IPage<Map<String,Object>>pageMaps(IPage<T>page);//條件分頁查詢IPage<Map<String,Object>>pageMaps(IPage<T>page,Wrapper<T>queryWrapper);5.3.2

MyBatis-Plus快速入門3.條件構(gòu)造器在開發(fā)中,有時候希望查詢根據(jù)所指定的條件進行增刪改查操作,而這個條件可能包含多種情況。在MyBatis-Plus中可以使用條件構(gòu)造器Wrapper根據(jù)具體的需求定義來封裝指定的條件eq(Rcolumn,Objectval)(1)eqcolumn表示數(shù)據(jù)庫字段名,val表示字段值。eq()方法用于匹配字段中值等于某個值的記錄,例如,eq("name","老王")用于匹配name字段中值等于"老王"的記錄。5.3.2

MyBatis-Plus快速入門ne(Rcolumn,Objectval)(2)nene()方法用于匹配字段中值不等于某個值的記錄,例如,eq("name","老王")用于匹配name字段中值不等于"老王"的記錄。3.條件構(gòu)造器gt(Rcolumn,Objectval)(3)gtgt()方法用于匹配字段中值大于某個值的記錄,例如,gt("age",18)用于匹配age字段中值大于18的記錄。5.3.2

MyBatis-Plus快速入門ge(Rcolumn,Objectval)(4)gege()方法用于匹配字段中值大于或等于某個值的記錄,例如,ge("age",18)用于匹配age字段中值大于或等于18的記錄。3.條件構(gòu)造器lt(Rcolumn,Objectval)(5)ltlt()方法用于匹配字段中值小于某個值的記錄,例如,lt("age",18)用于匹配age字段中值小于18的記錄。5.3.2

MyBatis-Plus快速入門le(Rcolumn,Objectval)(6)lele()方法用于匹配字段中值小于或等于某個值的記錄,例如,le("age",18)用于匹配age字段中值小于或等于18的記錄。3.條件構(gòu)造器between(Rcolumn,Objectval1,Objectval2)(7)betweenbetween()方法用于匹配字段中值在指定區(qū)間的記錄,例如,between("age",18,30)用于匹配age字段中值大于18并且小于30的記錄。5.3.2

MyBatis-Plus快速入門like(Rcolumn,Objectval)(8)likelike()方法用于模糊匹配字段中的值,例如,like("name","王")用于匹配name字段中值包含“王”的記錄。3.條件構(gòu)造器in(Rcolumn,Collection<?>value)(9)inin()方法用于匹配字段的值在指定組合中的記錄,例如,in("age",{1,2,3})用于匹配age字段中值為1或者2或者3的記錄。5.3.2

MyBatis-Plus快速入門groupBy(R...columns)(10)groupBygroupBy()方法用于給指定字段進行分組,例如,groupBy("id","name")用于對記錄根據(jù)id字段和name字段進行分組。3.條件構(gòu)造器5.3.3

整合MyBatis-Plus先定一個小目標(biāo)!

先定一個小目標(biāo)!掌握SpringBoot整合MyBatis-Plus,能夠整合SpringBoot和MyBatis-Plus,并使用MyBatis-Plus進行基本的增刪改查5.3.3

整合MyBatis-Plus1.配置依賴在項目chapter05的pom.xml文件中配置MyBatis-Plus整合SpringBoot的啟動器依賴,由于該依賴不是SpringBoot提供的,需要自行配置對應(yīng)的依賴版本號,具體如文件5-8所示。文件5-8pom.xml源代碼5.3.3

整合MyBatis-Plus2.設(shè)置配置信息引入的MyBatis-Plus整合SpringBoot啟動器依賴中,提供了數(shù)據(jù)庫連接的一些默認(rèn)配置。如果有單獨的MyBatis配置,請將對應(yīng)的配置文件路徑配置到configLocation中。本案例只演示MyBatis-Plus的基本操作,不需要配置額外的MyBatis配置,所以直接使用文件5-2中原有的數(shù)據(jù)庫連接配置即可。5.3.3

整合MyBatis-Plus3.創(chuàng)建實體類MyBatis-Plus標(biāo)注實體類的注解與SpringDataJPA不一樣,所以需要使用MyBatis-Plus的注解標(biāo)注實體類。在com.itheima.chapter05.entity包下創(chuàng)建實體類EBook,具體如文件5-9所示。文件5-9EBook.java源代碼5.3.3

整合MyBatis-Plus4.自定義Mapper接口在com.itheima.chapter05.dao包下創(chuàng)建自定義接口BookMapper,并使用該接口繼承BaseMapper接口,具體如文件5-10所示。文件5-10BookMapper.java源代碼5.3.3

整合MyBatis-Plus5.創(chuàng)建Service接口和實現(xiàn)類在項目的java目錄下創(chuàng)建包com.itheima.chapter05.service,并在該包下創(chuàng)建Service接口和實現(xiàn)類,具體如文件5-11和文件5-12所示。文件5-11BookService.java文件5-12BookServiceImpl.java源代碼5.3.3

整合MyBatis-Plus6.掃描Mapper接口在啟動類Chapter05Application上方使用@MapperScan注解掃描指定路徑的Mapper并交由Spring管理,具體如文件5-13所示。文件5-13Chapter05Application.java源代碼5.3.3

整合MyBatis-Plus7.定義測試方法在src\test\java目錄的com.itheima.chapter05包下創(chuàng)建測試類Chapter05ApplicationMPTests,在Chapter05ApplicationMPTests測試類中定義操作圖書信息的測試方法,具體如文件5-14所示。文件5-14Chapter05ApplicationMPTests.java源代碼5.3.3

整合MyBatis-Plus8.測試操作圖書信息運行文件5-14中的saveEBook()方法,測試新增圖書信息。5.3.3

整合MyBatis-Plus8.測試操作圖書信息運行文件5-14中的findEBook()方法,測試查詢圖書信息。5.3.3

整合MyBatis-Plus8.測試操作圖書信息運行文件5-14中的editEBook()方法,測試修改圖書信息。5.3.3

整合MyBatis-Plus8.測試操作圖書信息運行文件5-14中的delEBook()方法,測試刪除圖書信息。SpringBoot整合Redis5.45.4

SpringBoot整合Redis隨著互聯(lián)網(wǎng)Web2.0的興起,關(guān)系型數(shù)據(jù)庫在處理超大規(guī)模和高并發(fā)的Web2.0網(wǎng)站的數(shù)據(jù)時存在一些不足,需要采用更適合解決大規(guī)模數(shù)據(jù)集合、多重數(shù)據(jù)種類的數(shù)據(jù)庫,通常將這種類型的數(shù)據(jù)庫統(tǒng)稱為非關(guān)系型數(shù)據(jù)庫(NoSQL,NotOnlySQL)。常見的非關(guān)系型數(shù)據(jù)庫有MongoDb、Redis等,其中Redis以超高的性能、完美的文檔和簡潔易懂的源碼受到廣大開發(fā)人員的喜愛。下面將對Redis的相關(guān)知識和SpringBoot整合Redis進行講解。5.4.1

Redis快速入門先定一個小目標(biāo)!

先定一個小目標(biāo)!熟悉Redis快速入門,能夠說出Redis的概念和優(yōu)點、安裝和啟動Redis的方法、以及說出Redis支持的數(shù)據(jù)類型5.4.1

Redis快速入門1.Redis概述Redis(RemoteDictionaryServer,遠程字典服務(wù))是一個基于內(nèi)存的鍵值型非關(guān)系型數(shù)據(jù)庫,以Key-Value的形式存儲數(shù)據(jù)。Redis中存儲鍵(Key)、值(Value)的方式和Java中的HashMap類似,鍵和值是映射關(guān)系。在同一個庫中,Key是唯一不可重復(fù)的,每一個Key對應(yīng)一個Value。鍵值存儲的本質(zhì)就是使用Key標(biāo)示Value,當(dāng)想要檢索Value時,必須使用與Value相對應(yīng)的Key進行查找。5.4.1

Redis快速入門1.Redis概述Redis與傳統(tǒng)的關(guān)系型數(shù)據(jù)庫截然不同,Redis沒有提供手動創(chuàng)建數(shù)據(jù)庫的語句,Redis啟動后會默認(rèn)創(chuàng)建16個數(shù)據(jù)庫,用0~15進行編號,默認(rèn)使用編號為0的數(shù)據(jù)庫。相較于其他的鍵值存儲系統(tǒng),Redis主要有以下優(yōu)點。存取速度快:Redis基于內(nèi)存來實現(xiàn)數(shù)據(jù)存取,相對于磁盤來說,其讀寫速度要高出好幾個數(shù)量級,每秒可執(zhí)行大約110000次的設(shè)置操作,或者執(zhí)行81000次的讀取操作。支持豐富的數(shù)據(jù)類型:Redis支持開發(fā)人員常用的大多數(shù)數(shù)據(jù)類型,例如列表、集合、有序集合和散列等。操作具有原子性:所有Redis操作都是原子操作,這使得兩個客戶端并發(fā)訪問時,Redis服務(wù)器能接收更新后的值。提供多種功能:Redis提供了多種功能特性,可用作非關(guān)系型數(shù)據(jù)庫、緩存中間件、消息中間件等。5.4.1

Redis快速入門2.Redis安裝和啟動要想使用非關(guān)系型數(shù)據(jù)庫Redis,必須先安裝Redis。Redis可以在Windows系統(tǒng)和Linux系統(tǒng)安裝,也可以通過Docker鏡像來安裝,不同安裝方式的安裝過程也不相同。為了方便操作,此處選擇在Windows平臺下進行Redis安裝。5.4.1

Redis快速入門2.Redis安裝和啟動用于啟動Redis服務(wù)??蛻舳斯ぞ?。5.4.1

Redis快速入門2.Redis安裝和啟動雙擊redis-server.exe啟動Redis服務(wù)。5.4.1

Redis快速入門2.Redis安裝和啟動雙擊redis-cli.exe啟動客戶端程序。5.4.1

Redis快速入門2.Redis安裝和啟動Redis自帶的客戶端工具有時侯使用起來并不是特別方便,讀者也可以使用一些圖形化Redis客戶端管理軟件管理Redis。常用的有RedisDesktopManager,其在2022年更名為RESP.app。5.4.1

Redis快速入門2.Redis安裝和啟動單擊RRESP.app主界面左側(cè)的“連接到Redis服務(wù)器”,彈出“新連接設(shè)置”對話框。5.4.1

Redis快速入門2.Redis安裝和啟動設(shè)置所連接的Redis的相關(guān)信息后,單擊“確定”按鈕創(chuàng)建連接。5.4.1

Redis快速入門3.Redis的數(shù)據(jù)類型Redis中的數(shù)據(jù)庫沒有“數(shù)據(jù)表”的概念,通過Value不同的數(shù)據(jù)類型來實現(xiàn)存儲數(shù)據(jù)的需求,不同的數(shù)據(jù)類型能夠適應(yīng)不同的應(yīng)用場景,從而滿足開發(fā)者的需求。Value的數(shù)據(jù)類型有五種常用數(shù)據(jù)類型,分別為String(字符串)、Hash(散列)、List(列表)、Set(集合)、SortedSet(有序集合)。5.4.1

Redis快速入門3.Redis的數(shù)據(jù)類型(1)StringString可以靈活地表示字符串、整數(shù)、浮點數(shù)3種值,String有以下常見命令。SETkeyvalue:添加或者修改已經(jīng)存在的鍵值對。GETkey:根據(jù)鍵獲取對應(yīng)的值。MSETkey1value1[key2value2...]:批量添加多個鍵值對。MGETkey1[key2..]:根據(jù)一個或多個鍵獲取對應(yīng)的值。INCRkey:將鍵存儲的整數(shù)值自增1。INCRBYkeyincrement:將鍵存儲的整數(shù)值根據(jù)指定步長increment自增。INCRBYFLOATkeyincrement:將鍵存儲的浮點數(shù)根據(jù)指定步長increment自增。SETNXkeyvalue:當(dāng)且僅當(dāng)Key不存在時,添加一個鍵值對。SETEXkeysecondsvalue:添加一個String類型的鍵值對,并且指定有效期為seconds秒。5.4.1

Redis快速入門3.Redis的數(shù)據(jù)類型(2)ListRedis中的List與Java中的LinkedList類似,可以看作是一個雙向鏈表結(jié)構(gòu),既可以支持正向檢索,也可以支持反向檢索。List類型的數(shù)據(jù)有序、元素可以重復(fù)、插入和刪除速度快、查詢速度一般。常見命令如下。LPUSHkeyvalue1[value2...]:根據(jù)鍵向列表左側(cè)插入一個或多個元素。LPOPkey:根據(jù)鍵移除并返回列表左側(cè)的第一個元素,沒有則返回nil。RPUSHkeyvalue1[value2...]:根據(jù)鍵向列表右側(cè)插入一個或多個元素。RPOPkey:根據(jù)鍵移除并返回列表右側(cè)的第一個元素。LRANGEkeystarend:根據(jù)鍵返回指定范圍內(nèi)的所有元素。BLPOP和BRPOP:與LPOP和RPOP類似,只不過在沒有元素時等待指定時間,而不是直接返回nil。5.4.1

Redis快速入門3.Redis的數(shù)據(jù)類型(3)SetRedis的Set類型與Java中的HashSet類似,可以看作是一個Value為null的HashMap。Set類型的數(shù)據(jù)具有無序、元素不可重復(fù)、查找速度快和支持交集、并集、差集等功能的特征,常見命令如下。SADDkeymember1[member2...]:將一個或多個member元素加入到集合key中。SREMkeymember1[member2...]:刪除集合key中的一個或多個member元素。SCARDkey:返回集合key中元素的個數(shù)。SISMEMBERkeymember:判斷元素member是否存在于集合key中。SMEMBERSkey:獲取集合key中的所有元素。SINTERkey1[key2...]:獲取所有集合的交集。5.4.1

Redis快速入門3.Redis的數(shù)據(jù)類型(4)SortedSetRedis中的SortedSet是一個可排序的Set集合,SortedSet中的每一個元素都帶有一個score屬性,可以基于score屬性對元素排序,底層的實現(xiàn)是一個跳表(SkipList)加Hash表。SortedSet常見命令如下。ZADDkeyscoremember:添加一個或多個元素到集合key中,如果已經(jīng)存在則更新其score值。ZREMkeymember:刪除集合key中的元素member。ZSCOREkeymember:獲取集合key中的元素member的score值。ZRANKkeymember:獲取集合key中的元素member的排名。ZCARDkey:獲取集合key中的元素個數(shù)。ZCOUNTkeyminmax:統(tǒng)計集合key中score值在給定范圍內(nèi)的所有元素的個數(shù)。ZINCRBYkeyincrementmember:讓集合key中的元素member根據(jù)步長increment進行自增。5.4.1

Redis快速入門3.Redis的數(shù)據(jù)類型(5)HashHash是由字符串類型的field和value組成的映射表,可以把它理解成一個包含了多個鍵值對的集合,一般用于存儲對象。Hash有以下常見命令。HSETkeyfieldvalue:將集合key中字段field的值設(shè)為value。HGETkeyfield:獲取集合key中字段field的值。HMSETkeyfield1value1[field2value2...]:將一個或多個field-value對設(shè)置到集合key中。HMGETkeyfield1[field2...]:獲取集合key中一個或多個field的值。HGETALLkey:獲取集合key中的所有的field和Value。HKEYSkey:獲取集合key中的所有的field。HINCRBYkeyfieldincrement:讓集合key中的field字段根據(jù)步長increment自增。HSETNXkeyfieldvalue:在集合key中,當(dāng)且僅當(dāng)field不存在時,添加字段field,字段對應(yīng)的值為value。5.4.2

SpringDataRedis快速入門先定一個小目標(biāo)!

先定一個小目標(biāo)!掌握SpringDataRedis快速入門,能夠說出SpringDataRedis的特性,以及應(yīng)用SpringDataRedis的常見操作5.4.2

SpringDataRedis快速入門為了方便開發(fā)者使用Redis,Redis官方為主流的編程語言都提供了對應(yīng)的客戶端,其中面向Java的客戶端有Redisson、Jedis和Lettuce等。Jedis和Lettuce提供了Redis命令對應(yīng)的API,因此操作Redis比較方便。如果一個項目中使用了Lettuce連接Redis,后來決定棄用Lettuce改用Jedis,就要面臨修改代碼的問題,對于此種問題,可以使用SpringDataRedis。下面對SpringDataRedis概述和常見操作進行講解。5.4.2

SpringDataRedis快速入門SpringDataRedis是SpringData在Spring管理的項目中對Redis操作的具體實現(xiàn)。SpringBoot為支持Redis提供了spring-boot-starter-data-redis.jar,該Starter使用SpringDataRedis對底層Lettuce和Jedis進行了封裝,并為Lettuce和Jedis提供了自動配置。SpringDataRedis具有如下特性。提供了對不同Redis客戶端的整合Lettuce和Jedis。提供了RedisTemplate統(tǒng)一API來操作Redis。支持Redis的發(fā)布訂閱模型。支持Redis哨兵和Redis集群。支持基于Lettuce的響應(yīng)式編程。支持基于JDK、JSON、字符串、Spring對象的數(shù)據(jù)序列化及反序列化。支持基于Redis的JDKCollection實現(xiàn)。1.SpringDataRedis概述5.4.2

SpringDataRedis快速入門(1)RedisTemplate常見APISpringDataRedis中提供了RedisTemplate工具類,該工具類封裝了各種對Redis的操作,并且將不同數(shù)據(jù)類型的操作API封裝到了不同的Operation接口對象中。2.SpringDataRedis常見操作方法說明ValueOperations<K,V>opsForValue()獲取操作String類型數(shù)據(jù)的對象。ListOperations<K,V>opsForList()獲取操作List類型數(shù)據(jù)的對象。SetOperations<K,V>opsForSet()獲取操作Set類型數(shù)據(jù)的對象。ZSetOperations<K,V>opsForZSet()獲取操作SortedSet類型數(shù)據(jù)的對象。HashOperations<K,HK,HV>opsForHash()獲取操作Hash類型數(shù)據(jù)的對象。獲取常用Operation接口對象的方法5.4.2

SpringDataRedis快速入門為了能更便捷操作Redis,RedisTemplate還可以通過bound綁定指定的Key,綁定Key后再次進行一系列的操作時,無須顯式的再次指定Key。2.SpringDataRedis常見操作常用的綁定Key的方法方法說明BoundValueOperations<K,V>boundValueOps(Kkey)綁定映射String類型數(shù)據(jù)的KeyBoundListOperations<K,V>boundListOps(Kkey)綁定映射List類型數(shù)據(jù)的KeyBoundSetOperations<K,V>boundSetOps(Kkey綁定映射Set類型數(shù)據(jù)的KeyBoundZSetOperations<K,V>boundZSetOps(Kkey)綁定映射SortedSet類型數(shù)據(jù)的KeyBoundHashOperations

溫馨提示

  • 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

提交評論