時(shí)間:2024-02-05 12:47作者:下載吧人氣:35
課程導(dǎo)學(xué)
我們都知道MongoDB是一款非常出色的非關(guān)系型文檔數(shù)據(jù)庫(kù),你肯定會(huì)想問MongoDB這么強(qiáng),我們?cè)撛趺从没蛘哂猩哆\(yùn)用場(chǎng)景呢?
MongoDB的應(yīng)用場(chǎng)景非常多,無論是數(shù)據(jù)存儲(chǔ)還是日志存儲(chǔ)越來越多的公司在使用MongoDB,而我們今天也在SpringBoot基礎(chǔ)上使用MongoDB實(shí)現(xiàn)一個(gè)簡(jiǎn)易版本的物流訂單管理系統(tǒng)。
在使用前,你自己的電腦上要有IDEA編譯器來創(chuàng)建項(xiàng)目,還要擁有MongoDB數(shù)據(jù)庫(kù)和Studio 3T(MongoDB可視化數(shù)據(jù)庫(kù)管理工具,下載地址https://studio3t.com/)。
案例分析
1.1 案例分析
我想,大部分人都應(yīng)該有著購(gòu)物的經(jīng)歷,當(dāng)商品下單時(shí)就會(huì)出現(xiàn)一個(gè)物流單號(hào),接下來幾天內(nèi)的物流信息會(huì)根據(jù)這個(gè)單號(hào)更新。
然后接下來的幾天可能會(huì)到達(dá)不同地點(diǎn),進(jìn)行更新,你可能會(huì)好奇這樣一個(gè)功能是如何實(shí)現(xiàn),本案例就通過SpringBoot+MongoDB實(shí)現(xiàn)一個(gè)簡(jiǎn)易版本的物流訂單系統(tǒng)。當(dāng)然具體實(shí)現(xiàn)商用肯定要考慮很多細(xì)節(jié)也很復(fù)雜,本案例更側(cè)重于功能實(shí)現(xiàn)和MongoDB使用。
1.2 核心思路拆解
一個(gè)訂單數(shù)據(jù)是如何產(chǎn)生和更新的呢?首先一個(gè)訂單數(shù)據(jù)由下單時(shí)產(chǎn)生,然后該訂單經(jīng)歷各個(gè)物流點(diǎn)更新物流信息和訂單狀態(tài),最后在用戶取件之后訂單狀態(tài)更新后數(shù)據(jù)基本就不再更新了。
下單模塊:我想大部分人看過寄快遞下單流程或者自己下過單,核心就是一個(gè)表單頁(yè)面填寫寄件人姓名、地址、手機(jī)等信息和收件人姓名、地址、手機(jī)等信息。所以在這里具體實(shí)現(xiàn)也是填寫寄件人和收件人信息儲(chǔ)存。
物流模塊 :一個(gè)訂單下單后可能經(jīng)歷若干物流地點(diǎn),最終才能到達(dá)目的地被簽收。而就各個(gè)物流點(diǎn)來看,各個(gè)物流點(diǎn)的管理人員對(duì)該物流訂單添加一些物流信息,例如到達(dá)地址、訂單目前狀態(tài)、聯(lián)系方式等等。而本案例在添加物流信息的實(shí)現(xiàn)上也通過一個(gè)表單添加該訂單的物流信息,通過物流訂單的id進(jìn)行聯(lián)立。
實(shí)現(xiàn)這種數(shù)據(jù)應(yīng)該如何存儲(chǔ)?如果使用關(guān)系型數(shù)據(jù)庫(kù),就單訂單物流信息存儲(chǔ)可能至少需要使用兩張表來實(shí)現(xiàn),一張訂單(order)信息表存儲(chǔ)訂單一些固定欄位信息,一張物流(Logistics)信息表儲(chǔ)存動(dòng)態(tài)的物流變化,通過訂單id實(shí)現(xiàn)兩張表的關(guān)聯(lián)。
按照E-R圖設(shè)計(jì)數(shù)據(jù)庫(kù),按照我們簡(jiǎn)潔的設(shè)計(jì)方式,其數(shù)據(jù)其中一部分的數(shù)據(jù)是這樣的:
物流表中的order_id外鍵引用order表中的id字段進(jìn)行關(guān)聯(lián)。在查詢訂單數(shù)據(jù)的時(shí)候需要關(guān)聯(lián)查詢。物流訂單系統(tǒng)確實(shí)可以使用關(guān)系數(shù)據(jù)庫(kù)去實(shí)現(xiàn),但是數(shù)據(jù)量過大可能會(huì)有性能瓶頸需要優(yōu)化,如果采用MongoDB不僅可以提高效率,還可以使得流程變得更加簡(jiǎn)單。
訂單的特點(diǎn)是隨著遞送過程,訂單數(shù)據(jù)需要隨時(shí)更新路徑。數(shù)據(jù)結(jié)構(gòu)上需要可以靈活應(yīng)對(duì),這點(diǎn)非常符合MongoDB的document文檔模型,并且MongoDB支持GIS功能,非常適用于MongoDB來支撐物流業(yè)務(wù)(這里簡(jiǎn)易版本就不使用該功能了)。而物流行業(yè)里訂單比較獨(dú)立,跨訂單的操作很少,創(chuàng)建、更新(追加)的操作會(huì)較多,物流業(yè)務(wù)模型上與MongoDB非常的匹配。本課程就是使用MongoDB實(shí)現(xiàn)一個(gè)物流訂單系統(tǒng)的小例子。
1.3 案例涉及知識(shí)點(diǎn)
SpringBoot
相信你對(duì)SpringBoot很熟悉,由于Spring的發(fā)展、微服務(wù)的發(fā)展使得SpringBoot越來越流行,已經(jīng)成為JavaWeb開發(fā)的主流框架。
SpringBoot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開發(fā)過程。該框架使用了特定的方式來進(jìn)行配置,從而使開發(fā)人員不再需要定義樣板化的配置。通過這種方式,SpringBoot在蓬勃發(fā)展的快速應(yīng)用開發(fā)領(lǐng)域(rapid application development)成為領(lǐng)導(dǎo)者。
簡(jiǎn)而言之,SpringBoot是當(dāng)前web開發(fā)主流,其簡(jiǎn)化了Spring的配置讓開發(fā)者能夠更容易上手Web項(xiàng)目的開發(fā)。且MongdoDB能夠快速與SpringBoot整合,在項(xiàng)目中能夠快速便捷操作MongoDB;
MongoDB
MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)。由C++語言編寫。旨在為web應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。MongoDB是一個(gè)介于關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)之間的產(chǎn)品,是非關(guān)系型數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系型數(shù)據(jù)庫(kù)的。它支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似JSON的BSON格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。MongoDB最大的特點(diǎn)是它支持的查詢語言非常強(qiáng)大,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫(kù)單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。
本案例就是基于SpringBoot和MongoDB實(shí)現(xiàn)一個(gè)物流訂單系統(tǒng)的小案例,實(shí)際的物流場(chǎng)景需要考慮的問題肯定很多也比較復(fù)雜,這是實(shí)現(xiàn)一個(gè)簡(jiǎn)易版本的物流訂單系統(tǒng)主要為了MongoDB的使用和學(xué)習(xí)。
1.4案例實(shí)現(xiàn)步驟
分析完案例以及了解案例設(shè)計(jì)的知識(shí)點(diǎn)后,就可以一步一步開始動(dòng)手實(shí)現(xiàn)本案例,本案例要實(shí)現(xiàn)的就是訂單創(chuàng)建、訂單信息更新、查詢、刪除的一個(gè)小型完整的物流訂單管理系統(tǒng)。而在具體實(shí)現(xiàn)上按照以下步驟:
整個(gè)案例實(shí)現(xiàn)火熱運(yùn)行的環(huán)境如下:
實(shí)現(xiàn)步驟
第一步 預(yù)備工作
1.1 創(chuàng)建MongoDB數(shù)據(jù)庫(kù)
打開Studio 3T數(shù)據(jù)庫(kù)管理工具,連接本地MongoDB數(shù)據(jù)庫(kù)之后,創(chuàng)建名為test的數(shù)據(jù)庫(kù),在test數(shù)據(jù)庫(kù)中創(chuàng)建名為order的集合:
1.2 創(chuàng)建SpringBoot項(xiàng)目
首先,打開IDEA創(chuàng)建項(xiàng)目,選擇創(chuàng)建SpringBoot項(xiàng)目:
然后在選擇Gruop和Aritifact的時(shí)候分別填寫com和mongodemo,Java Version選擇8版本。
在勾選模塊時(shí)候,這里勾選Spring web、MongoDB依賴模塊,選擇合適位置創(chuàng)建項(xiàng)目,項(xiàng)目就可以成功創(chuàng)建:
創(chuàng)建項(xiàng)目之后,需要做一些前置工作預(yù)備。
1.3 創(chuàng)建Java相關(guān)文件
創(chuàng)建完項(xiàng)目,我們需要做一些預(yù)備工作用來完成緩存。我們首先要在項(xiàng)目中的application.properties中添加配置連接到數(shù)據(jù)庫(kù),配置規(guī)則為:spring.data.mongodb.uri=mongodb://地址:端口/數(shù)據(jù)庫(kù)名
,本案例使用本地的MongoDB數(shù)據(jù)庫(kù),默認(rèn)端口為27017,而使用的MongoDB具體數(shù)據(jù)庫(kù)名稱為test,那么就可以按照以下進(jìn)行配置:
spring.data.mongodb.uri=mongodb://localhost:27017/test
網(wǎng)友評(píng)論