版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章SpringBoot使用NoSQLNoSQL數(shù)據(jù)庫(kù)
NoSQL是指非關(guān)系型數(shù)據(jù)庫(kù),非關(guān)系型數(shù)據(jù)庫(kù)和關(guān)系型數(shù)據(jù)庫(kù)的區(qū)別,最重要的是NoSQL不適用SQL作為查詢語(yǔ)言。其數(shù)據(jù)存儲(chǔ)可以不需要固定的表格模式,一般都有水平可擴(kuò)展的特征。NoSQL主要有以下幾種分類:
鍵值存儲(chǔ)數(shù)據(jù)庫(kù):鍵值數(shù)據(jù)庫(kù)就像在傳統(tǒng)語(yǔ)言中使用的哈希表??梢酝ㄟ^(guò)key來(lái)添加、查詢或者刪除數(shù)據(jù)。文檔型數(shù)據(jù)庫(kù):文檔數(shù)據(jù)庫(kù)會(huì)將數(shù)據(jù)以文檔的形式儲(chǔ)存。每個(gè)文檔都是自包含的數(shù)據(jù)單元,是一系列數(shù)據(jù)項(xiàng)的集合。列存儲(chǔ)數(shù)據(jù)庫(kù):功能相對(duì)局限,但是查找速度快,容易進(jìn)行分布式擴(kuò)展,一般用于分布式文件系統(tǒng)中。圖形(Graph)數(shù)據(jù)庫(kù):我們將數(shù)據(jù)以圖的方式儲(chǔ)存,專注于構(gòu)建關(guān)系圖譜。2第6章SpringBoot使用NoSQL6.1
整合Redis6.2
整合MongoDB36.1整合Redis6.1.1Redis簡(jiǎn)介Redis是一個(gè)使用ANSIC語(yǔ)言編寫(xiě)的基于內(nèi)存的NoSQL數(shù)據(jù)庫(kù),是一個(gè)高性能的緩存存儲(chǔ)系統(tǒng),整個(gè)數(shù)據(jù)庫(kù)加載在內(nèi)存當(dāng)中進(jìn)行操作,定期通過(guò)異步操作把數(shù)據(jù)庫(kù)數(shù)據(jù)flash到硬盤(pán)上進(jìn)行保存。Redis是目前最為流行的鍵值對(duì)存儲(chǔ)數(shù)據(jù)庫(kù),以Key-Value的形式存儲(chǔ)數(shù)據(jù),沒(méi)有數(shù)據(jù)表,直接用鍵值對(duì)的形式存儲(chǔ)數(shù)據(jù),被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器。Redis是完全開(kāi)源的,遵守BSD協(xié)議,是一個(gè)高性能的內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng),主要用于JavaEE應(yīng)用的緩存實(shí)現(xiàn),也可作為消息代理(MessageBroker)使用,偶爾作為key-value數(shù)據(jù)庫(kù)使用。其中包括字符串(string),列表(list),哈希(hash),集合(set)和有序集合(sortedset)五大類型。46.1.1Redis簡(jiǎn)介Redis與其他Key-Value緩存產(chǎn)品有以下三個(gè)特點(diǎn):Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤(pán)中,重啟的時(shí)候可以再次加載進(jìn)行使用。Redis不僅僅支持簡(jiǎn)單的key-value類型的數(shù)據(jù),同時(shí)還提供list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。56.1.2Redis安裝(1)下載Redis訪問(wèn)Redis官網(wǎng)https://redis.io/download,只提供Linux版本的下載,官網(wǎng)推薦使用Linux版本Redis,Redis官方不支持Windows系統(tǒng)。要使用Windows版本的Redis,可從GitHub上下載由Microsoft開(kāi)放技術(shù)小組開(kāi)發(fā)和維護(hù)的針對(duì)64位的Windows版本,訪問(wèn)/tporadowski/redis/releases,如圖6-1所示。選擇zip版本或msi版本下載,這里下載Redis-x64-5.0.10.zip的版本,將下載的zip文件解壓縮后,放在D:盤(pán)的根目錄下。66.1.2Redis安裝(2)啟動(dòng)Redis服務(wù)在運(yùn)行中輸入cmd,然后把目錄指向解壓的Redis目錄,如圖6-2所示。執(zhí)行Redis-x64-5.0.10目錄下redis-server.exeredis.windows.conf命令行啟動(dòng)Redis服務(wù),如圖6-3所示,表示成功啟動(dòng)Redis服務(wù)。
也可直接雙擊打開(kāi)Redis目錄下的redis-server.exe文件,啟動(dòng)Redis服務(wù)。76.1.2Redis安裝(3)使用客戶端連接Redis服務(wù)器
Redis服務(wù)器啟動(dòng)成功后,重新打開(kāi)一個(gè)cmd命令窗口,把目錄指向解壓的Redis目錄,使用redis-cli.exe-h-p6379命令,創(chuàng)建一個(gè)地址為、端口號(hào)為6379的Redis數(shù)據(jù)庫(kù)服務(wù),然后輸入ping命令,就會(huì)輸出PONG的提示,表示連接成功,如圖6-4所示。也可直接雙擊打開(kāi)Redis目錄下的redis-cli.exe文件,啟動(dòng)Redis客戶端。
(4)操作測(cè)試Redis使用setkeyvalue和getkey命令保存和獲得數(shù)據(jù),如圖6-5所示。
86.1.2Redis安裝(5)使用Redis客戶端工具查看數(shù)據(jù)使用Redis自帶的redis-cli.exe需要通過(guò)命令行去操作,可以使用例如RedisClient、RedisDesktopManager、RedisStudio等,這里我們使用RedisClient客戶端工具,下載該工具后打開(kāi)RedisClient,如圖6-6所示。
單擊Server菜單下的Add,或右擊左側(cè)列表中的Redisservers,選擇Addserver,添加Redis服務(wù),填入相關(guān)信息,如圖6-7所示。單擊OK按鈕后,可以看到Redis服務(wù)中的數(shù)據(jù)庫(kù),共16個(gè)數(shù)據(jù)庫(kù),db0是默認(rèn)的數(shù)據(jù)庫(kù)名,我們剛才存進(jìn)去的username就在該數(shù)據(jù)庫(kù)中,展開(kāi)db0數(shù)據(jù)庫(kù),即可看到username的字段數(shù)據(jù),如圖6-8所示。
96.1.3SpringBoot整合Redis下面通過(guò)示例來(lái)講解SpringBoot整合Redis,步驟如下:(1)新建一個(gè)SpringBoot工程chapter06redis,Group和Packagename為com.yzpc,在依賴中選擇Web節(jié)點(diǎn)下的SpringWeb依賴和NoSQL節(jié)點(diǎn)下的SpringDataRedis(Access+Driver)依賴,單擊Finish按鈕,如圖6-9所示。
pom.xml中自動(dòng)添加的依賴代碼,代碼如下:(2)在perties配置文件中加入有關(guān)redis的有關(guān)配置,配置如下:10<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!--省略Web中SpringWeb依賴代碼-->spring.redis.database=0spring.redis.host=localhostspring.redis.port=6379#如果redis有密碼,這里就要設(shè)置相應(yīng)密碼spring.redis.password=
6.1.3SpringBoot整合Redis(3)在項(xiàng)目的src/mian/java/路徑下的com.yzpc包中,新建一個(gè)pojo包,在并在該包中數(shù)據(jù)表user對(duì)應(yīng)的實(shí)體類User,代碼如下所示。
(4)在項(xiàng)目的src/mian/java/路徑下的com.yzpc包中,新建一個(gè)controller包,并在該包中創(chuàng)建UserController的類,進(jìn)行測(cè)試,代碼如下所示。(5)啟動(dòng)項(xiàng)目,在瀏覽器訪問(wèn)http://localhost:8080/save,可以看到控制臺(tái)輸出信息,如圖6-10所示。11packagecom.yzpc.pojo;importjava.io.Serializable;publicclassUserimplementsSerializable{
privateintid;
privateStringusername;
privateStringpassword;
//此處省略相應(yīng)屬性的setter/getter方法
//此處省略構(gòu)造方法
//省略重寫(xiě)的toString方法}@RestControllerpublicclassUserController{
@Autowired
RedisTemplateredisTemplate;
@Autowired
StringRedisTemplatestringRedisTemplate;
@GetMapping("/save")
publicvoidsave(){
ValueOperations<String,String>ops1
=stringRedisTemplate.opsForValue();
//添加字符串
ops1.set("username","張三");
Stringusername=ops1.get("username");
System.out.println(username);
ValueOperations
ops2
=redisTemplate.opsForValue();
Useruser=newUser(1,"admin","admin");
//添加實(shí)體類
ops2.set("user",user);
System.out.println("Redis是否存在相應(yīng)的key:"
+
redisTemplate.hasKey("user"));
System.out.println("從Redis數(shù)據(jù)庫(kù)中獲取對(duì)象:"+(User)ops2.get("user"));
//修改
ops2.getAndSet("user",newUser(2,"yzpc","yzpc"));
//查詢
Useru=(User)ops2.get("user");
System.out.println("從Redis數(shù)據(jù)庫(kù)中獲取對(duì)象:"
+
u.toString());
//刪除
Booleanb=redisTemplate.delete("user");
System.out.println("從Redis中是否刪除相應(yīng)的鍵為user的對(duì)象:"+b);
}}
6.2整合MongoDB6.2.1MongoDB簡(jiǎn)介MongoDB是一個(gè)非常成熟的NoSQL數(shù)據(jù)庫(kù),與Redis采用key-value存儲(chǔ)機(jī)制不同,MongoDB是基于文檔的NoSQL,由C++語(yǔ)言編寫(xiě),旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案,是NoSQL數(shù)據(jù)庫(kù)產(chǎn)品中最熱門(mén)的一種。MongoDB介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的產(chǎn)品。它支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似JSON的BSON(BinaryJSON,二進(jìn)制JSON)格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。MongoDB是由數(shù)據(jù)庫(kù)(database)、集合(collection)、文檔對(duì)象(document)三個(gè)層次組成。MongoDB對(duì)于關(guān)系型數(shù)據(jù)庫(kù)里的表,但是集合中沒(méi)有列、行和關(guān)系概念,這體現(xiàn)了模式自由的特點(diǎn)。
126.2.2MongoDB安裝MongoDB提供了多種版本操作系統(tǒng)的安裝包,這里主要講解Windows操作系統(tǒng)版本的MongoDB。(1)進(jìn)入MongoDB官網(wǎng)/try/download/community,下載社區(qū)版的安裝包,這里選擇Windows平臺(tái)下4.2.12版本的msi安裝包,點(diǎn)擊Download按鈕進(jìn)行下載,如圖6-11所示。
(2)下載完成后得到mongodb-win32-x86_64-2012plus-4.2.12-signed.msi的安裝文件,雙擊安裝文件開(kāi)始安裝,然后根據(jù)提示單擊Next按鈕即可,當(dāng)進(jìn)入如圖6-12所示的界面時(shí),去掉InstallMongoDBCompass前面的復(fù)選框,否則安裝會(huì)特別慢。136.2.2MongoDB安裝(3)如果使用MongoDB可視化的圖形界面管理工具M(jìn)ongoDBCompass操作MongoDB數(shù)據(jù)庫(kù),可從官方網(wǎng)站/try/download/compass單獨(dú)下載相應(yīng)版本的MongoDBCompass進(jìn)行安裝,如圖6-13所示。(4)安裝MongoDBCompass可視化工具,完成后運(yùn)行MongoDBCompass工具,如圖6-14所示。(5)點(diǎn)擊“Fillinconnectionfieldsindividually”鏈接可填寫(xiě)數(shù)據(jù)庫(kù)連接相關(guān)配置,這里采用默認(rèn)值,點(diǎn)擊CONNECT按鈕,連接成功之后,顯示出默認(rèn)自帶的三個(gè)數(shù)據(jù)庫(kù)(admin、config、local),如圖6-15所示。146.2.3SpringBoot整合MongoDB
下面通過(guò)示例來(lái)講解SpringBoot整合MongoDB,具體步驟如下:(1)使用MongoDBCompass工具創(chuàng)建名為chapter06的數(shù)據(jù)庫(kù),在MongoDBCompass工具界面上點(diǎn)擊“CREATEDATABASE”按鈕或界面左側(cè)下方的“+”,在創(chuàng)建數(shù)據(jù)庫(kù)界面中,DatabaseName處輸入chapter06,CollectionName處輸入book,如圖6-16所示。(2)新建一個(gè)SpringBoot工程chapter06mongodb,Group和Packagename為com.yzpc,在Dependencies依賴中選擇Web節(jié)點(diǎn)下的SpringWeb依賴和NoSQL節(jié)點(diǎn)下的SpringDataMongoDB依賴,單擊Finish按鈕,如圖6-17所示。156.2.3SpringBoot整合MongoDBpom.xml文件中自動(dòng)添加的依賴代碼,如下所示。
在perties配置文件中加入mongodb數(shù)據(jù)庫(kù)連接的有關(guān)配置信息如下。(3)在項(xiàng)目的src/mian/java/路徑下的com.yzpc包中,新建一個(gè)pojo包,并在該包中新建實(shí)體類Book,使用@Document(collection="book")注解通過(guò)collection參數(shù)指定Book類聲明為mongodb的文檔集合book,代碼如下所示。(4)在項(xiàng)目的src/mian/java/路徑下的com.yzpc包中,新建一個(gè)repository包,并在該包中創(chuàng)建BookRepository的接口,并繼承MongoRepository接口,代碼如下所示。16<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency><!--省略Web中SpringWeb依賴代碼-->spring.data.mongodb.uri=mongodb://localhost:27017/chapter06packagecom.yzpc.pojo;importorg.springframework.data.annotation.Id;importorg.springframework.data.mongodb.core.mapping.Document;@Document(collection="book") publicclassBook{
@Id //主鍵,不可重復(fù),自帶索引
privateintid;
privateStringname;
privateStringpublisher;
privatedoubleprice;
//此處省略相應(yīng)屬性的setter/getter方法
//此處省略構(gòu)造方法
//重寫(xiě)toString方法}packagecom.yzpc.repository;importcom.yzpc.pojo.Book;importorg.springframework.data.mongodb.repository.MongoRepository;importorg.springframework.stereotype.Repository;importjava.util.List;@RepositorypublicinterfaceBookRepositoryextendsMongoRepository<Book,Integer>{
BookfindById(intid);
BookfindByName(Stringname);
List<Book>findBooksByNameContains(Stringname);}6.2.3SpringBoot整合MongoDB(5)在項(xiàng)目的src/mian/java/路徑下的com.yzpc包中,新建一個(gè)controller包,并在該包中創(chuàng)建BookController的類,這里以保存圖書(shū)列表saveBooks、根據(jù)id查詢圖書(shū)findById為例,代碼如下所示。(6)啟動(dòng)項(xiàng)目,在瀏覽器中訪問(wèn)http://localhost:8080/saveBooks,測(cè)試向chapter06數(shù)據(jù)庫(kù)的book集合中存入4條記錄,并將此4條記錄在頁(yè)面輸出,如圖6-18所示。
訪問(wèn)http://localhost:8080/findById?id=4,查詢id為4的記錄,如圖6-20所示。17@RestController
publicclassBookController{
@Autowired
BookRepositorybookRepository;
@GetMapping("/saveBooks")
publicList<Book>saveBooks(){
List<Book>bookList=newArrayList<Book>();
bookList.add(newBook(1,"SpringBoot編程思想","電子工業(yè)出版社",118.00));
bookList.add(newBook(2,"SpringBoot開(kāi)發(fā)實(shí)戰(zhàn)","清華大學(xué)出版社",59.90));
bookList.add(newBook(3,"SpringBoot2實(shí)戰(zhàn)之旅","清華大學(xué)出版社",79.00));
bookList.add(newBook(4,"SpringBoot實(shí)戰(zhàn)派","電子工業(yè)出版社",109.00));
returnbookRepository.saveAll(bookList);
}
@GetMapping("/findById")
publicBookfindById(intid){
returnbookRepository.findById(id);
}//省略addBook、findByName、updateBook、deleteBookByName等方法}6.2.3SpringBoot整合MongoDB(7)除了繼承MongoRepository實(shí)現(xiàn)對(duì)數(shù)據(jù)操作外,SpringDataMongoDB還通了使用MongoTemplate用來(lái)方便操作MongoDB。在SpringBoot中,若添加了MongoDB相關(guān)的依賴,則默認(rèn)會(huì)有一個(gè)MongoTemplate注冊(cè)到Spring容器中,相關(guān)的配置源碼在MongoDataAutoConfiguration類中。因此,用戶可以直接使用MongoTemplate,在Controller中直接注入MongoTemplate就可以使用,添加代碼到BookController中,這里以添加記錄和查詢記錄為例,代碼如下所示。重新啟動(dòng)項(xiàng)目,訪問(wèn)
http://localhost:8080/saveBook,測(cè)試向chapter06數(shù)據(jù)庫(kù)的book集合中插入記錄,使用MongoDBCompass工具查看集合中的記錄,查看是否插入成功。訪問(wèn)http://
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版市政道路砍割樁施工項(xiàng)目合同2篇
- 2025年度生態(tài)農(nóng)業(yè)餐飲食材配送框架協(xié)議3篇
- 梧州職業(yè)學(xué)院《推拿學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024版醫(yī)療機(jī)構(gòu)餐飲服務(wù)合作協(xié)議版B版
- 二零二五版醫(yī)療設(shè)備檢驗(yàn)試劑配套供應(yīng)協(xié)議2篇
- 2024版行政人員合同
- 二零二五版單位食堂餐飲服務(wù)設(shè)施升級(jí)改造合同3篇
- 2024版廣告設(shè)計(jì)與發(fā)布合同
- 太湖創(chuàng)意職業(yè)技術(shù)學(xué)院《輕化工程專業(yè)發(fā)展概論》2023-2024學(xué)年第一學(xué)期期末試卷
- 蘇州大學(xué)應(yīng)用技術(shù)學(xué)院《電工電拖》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年醫(yī)師定期考核臨床業(yè)務(wù)知識(shí)考試題庫(kù)及答案(共三套)
- 2014新PEP小學(xué)英語(yǔ)六年級(jí)上冊(cè)-Unit5-What-does-he-do復(fù)習(xí)課件
- 建筑材料供應(yīng)鏈管理服務(wù)合同
- 孩子改名字父母一方委托書(shū)
- 2024-2025學(xué)年人教版初中物理九年級(jí)全一冊(cè)《電與磁》單元測(cè)試卷(原卷版)
- 江蘇單招英語(yǔ)考綱詞匯
- 2024年事業(yè)單位財(cái)務(wù)工作計(jì)劃例文(6篇)
- 2024年工程咨詢服務(wù)承諾書(shū)
- 青桔單車(chē)保險(xiǎn)合同條例
- 車(chē)輛使用不過(guò)戶免責(zé)協(xié)議書(shū)范文范本
- 2023-2024學(xué)年天津市部分區(qū)九年級(jí)(上)期末物理試卷
評(píng)論
0/150
提交評(píng)論