最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在SpringBoot中使用MongoDB完成數(shù)據(jù)存儲(chǔ)

 更新時(shí)間:2023年11月19日 09:48:47   作者:Miaow.Y.Hu  
本文主要介紹了在SpringBoot中如惡化使用MongoDB完成數(shù)據(jù)存儲(chǔ),接下來這篇我們將圍繞MongoDB進(jìn)行,MongoDB是一個(gè)開源的,面向文檔的NoSQL數(shù)據(jù)庫管理系統(tǒng),使用類似JSON的BSON(二進(jìn)制JSON)格式來存儲(chǔ)數(shù)據(jù),具有靈活的數(shù)據(jù)模型和強(qiáng)大的查詢功能,需要的朋友可以參考下

我們?cè)陂_發(fā)中用到的數(shù)據(jù)存儲(chǔ)工具有許多種,我們常見的數(shù)據(jù)存儲(chǔ)工具包括:

關(guān)系性數(shù)據(jù)庫:使用表格來存儲(chǔ)數(shù)據(jù),支持事務(wù)和索引。(如:MySQL,Oracle,SQL Server等)。NoSQL數(shù)據(jù)庫:不使用表格來存儲(chǔ)數(shù)據(jù),而是使用鍵值對(duì)、文檔、或者圖形等方式來存儲(chǔ)數(shù)據(jù),適合處理高并發(fā)和大規(guī)模數(shù)據(jù)。(Redis,MongoDB,Cassandra等)文件存儲(chǔ):將數(shù)據(jù)存儲(chǔ)在本地或者遠(yuǎn)程服務(wù)器文件中,常用與存儲(chǔ)較小的文件。(FTP,SFTP,AWS C3等)云存儲(chǔ):數(shù)據(jù)存儲(chǔ)在云端,方便多人協(xié)作和備份。(Google Drive,Dropbox,OneDriver等)內(nèi)存存儲(chǔ) :將數(shù)據(jù)存儲(chǔ)在內(nèi)存中,提供快速的讀寫速度,但是不適用存儲(chǔ)持久化數(shù)據(jù)(Redis,Memcache等)。緩存:將數(shù)據(jù)存儲(chǔ)在緩存中,提高訪問速度,減少數(shù)據(jù)庫壓力。(Apc,Memcache,Redis等)隊(duì)列:將任務(wù)分發(fā)到不同的隊(duì)列中進(jìn)行處理,提高系統(tǒng)的可靠性和可拓展性。(RabbitMQ,Kafka等)

這篇我們將圍繞MongoDB進(jìn)行,MongoDB是一個(gè)開源的,面向文檔的NoSQL數(shù)據(jù)庫管理系統(tǒng),使用類似JSON的BSON(二進(jìn)制JSON)格式來存儲(chǔ)數(shù)據(jù),具有靈活的數(shù)據(jù)模型和強(qiáng)大的查詢功能。

與傳統(tǒng)的關(guān)系型數(shù)據(jù)庫不同的是,MongoDB不使用表和行的結(jié)構(gòu),而是使用集合和文檔進(jìn)行的,一個(gè)集合就相當(dāng)于關(guān)系型數(shù)據(jù)庫里邊的表,一個(gè)文檔就相當(dāng)于表中的一行數(shù)據(jù),每個(gè)文檔都是一個(gè)鍵值對(duì)的集合,可以包含不同類型的數(shù)據(jù)。

MongoDB的特點(diǎn):

  • 面向文檔:MongoDB使用靈活的文檔模型,可以存儲(chǔ)不同結(jié)構(gòu)的數(shù)據(jù),無需事先定義表結(jié)構(gòu)。
  • 可擴(kuò)展性:MongoDB支持水平擴(kuò)展,可以通過添加更多的服務(wù)器來處理大規(guī)模的數(shù)據(jù)和高并發(fā)訪問。
  • 高性能:MongoDB具有快速的讀寫性能,支持索引和復(fù)雜查詢。
  • 強(qiáng)大的查詢語言:MongoDB支持豐富的查詢語言,包括條件查詢、范圍查詢、正則表達(dá)式查詢等。
  • 數(shù)據(jù)復(fù)制和故障恢復(fù):MongoDB支持?jǐn)?shù)據(jù)復(fù)制和自動(dòng)故障恢復(fù),可以提供高可用性和數(shù)據(jù)安全性。
  • 地理空間索引:MongoDB支持地理空間索引,可以進(jìn)行地理位置相關(guān)的查詢和分析。
  • 開源和活躍的社區(qū):MongoDB是開源的,擁有龐大的用戶社區(qū)和活躍的開發(fā)者社區(qū)。

首先在我們測(cè)試MongoDB之前,我們需要安裝MongoDB,MongoDB下載網(wǎng)站:https://www.mongodb.com/try/download/community

在這里插入圖片描述

之后安裝后,創(chuàng)建一個(gè)test數(shù)據(jù)庫:

在這里插入圖片描述

引入相關(guān)依賴:

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-mongodb</artifactId>
		</dependency>

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<scope>provided</scope>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

在application.properties中配置相關(guān)連接:

spring.data.mongodb.uri=mongodb://localhost:27017/test

server.port=7723

創(chuàng)建一個(gè)實(shí)體類User

public class User {

    @Id
    private Long id;

    private String username;
    private Integer age;


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public User() {
    }

    public User(Long id, String username, Integer age) {
        this.id = id;
        this.username = username;
        this.age = age;
    }
}

實(shí)現(xiàn)用戶實(shí)體User的數(shù)據(jù)訪問對(duì)象

public interface UserRepository extends MongoRepository<User, Long> {

    User findByUsername(String username);

}

接下來創(chuàng)建一個(gè)單元測(cè)試用例:

@SpringBootTest(classes = Application.class)
public class ApplicationTests {

    @Autowired
    private UserRepository userRepository;

    @Test
    public void test() throws Exception {
        userRepository.deleteAll();

        // 創(chuàng)建三個(gè)User,并驗(yàn)證User總數(shù)
        userRepository.save(new User(1L, "麻衣**", 22));
        userRepository.save(new User(2L, "娜*", 24));
        userRepository.save(new User(3L, "玩偶**", 26));
        Assertions.assertEquals(3, userRepository.findAll().size());

        // 刪除一個(gè)User,再驗(yàn)證User總數(shù)
        User u = userRepository.findById(1L).get();
        userRepository.delete(u);
        Assertions.assertEquals(2, userRepository.findAll().size());

        // 刪除一個(gè)User,再驗(yàn)證User總數(shù)
        u = userRepository.findByUsername("娜*");
        userRepository.delete(u);
        Assertions.assertEquals(1, userRepository.findAll().size());
    }

}

控制臺(tái)輸出

2023-11-17 15:39:39.655  INFO 15808 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms'}
2023-11-17 15:39:39.737  INFO 15808 --- [localhost:27017] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:2, serverValue:26}] to localhost:27017
2023-11-17 15:39:39.737  INFO 15808 --- [localhost:27017] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:1, serverValue:27}] to localhost:27017
2023-11-17 15:39:39.737  INFO 15808 --- [localhost:27017] org.mongodb.driver.cluster               : Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=17, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=58204100}
2023-11-17 15:39:39.963  INFO 15808 --- [           main] c.miaow.demo.ApplicationTests   : Started ApplicationTests in 2.079 seconds (JVM running for 2.619)
2023-11-17 15:39:40.106  INFO 15808 --- [           main] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:3, serverValue:28}] to localhost:27017
2023-11-17 15:39:40.184  INFO 15808 --- [extShutdownHook] org.mongodb.driver.connection            : Closed connection [connectionId{localValue:3, serverValue:28}] to localhost:27017 because the pool has been closed.
2023-11-17 15:39:40.184  INFO 15808 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'

注意,MongoDB的語法有所區(qū)別,具體的如下:

查詢語法:

插入文檔:db.collection.insertOne(document)db.collection.insertMany(documents)

查詢文檔:db.collection.find(query, projection)

更新文檔:db.collection.updateOne(filter, update)db.collection.updateMany(filter, update)

刪除文檔:db.collection.deleteOne(filter)db.collection.deleteMany(filter)

條件查詢:db.collection.find({ field: value })

范圍查詢:db.collection.find({ field: { $gt: value1, $lt: value2 } })
正則表達(dá)式查詢:db.collection.find({ field: /pattern/ })

排序:db.collection.find().sort({ field: 1 })(1表示升序,-1表示降序)

分頁:db.collection.find().skip(offset).limit(limit)

聚合查詢:db.collection.aggregate(pipeline)

在Java中的相關(guān)操作:

連接MongoDB:使用MongoClient類來連接MongoDB數(shù)據(jù)庫。

普通連接方式,如果是Spring Boot中就是配置一下

MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("mydatabase");

獲取集合:使用getCollection方法獲取集合對(duì)象。

MongoCollection<Document> collection = database.getCollection("mycollection");

插入文檔:

Document document = new Document("name", "miaow")
    .append("age", 24)
    .append("email", "miaow@example.com");
collection.insertOne(document);

查詢文檔:

FindIterable<Document> result = collection.find(new Document("name", "miaow"));
for (Document document : result) {
    // 處理查詢結(jié)果
}

更新文檔:

collection.updateOne(eq("name", "miaow"), new Document("$set", new Document("age", 24)));

刪除文檔:

collection.deleteOne(eq("name", "miaow"));

以上就是在SpringBoot中使用MongoDB完成數(shù)據(jù)存儲(chǔ)的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot MongoDB數(shù)據(jù)存儲(chǔ)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringCloud @RefreshScope注解源碼層面深入分析

    SpringCloud @RefreshScope注解源碼層面深入分析

    @RefreshScope注解能幫助我們做局部的參數(shù)刷新,但侵入性較強(qiáng),需要開發(fā)階段提前預(yù)知可能的刷新點(diǎn),并且該注解底層是依賴于cglib進(jìn)行代理的,所以不要掉入cglib的坑,出現(xiàn)刷了也不更新情況
    2023-04-04
  • Nacos配置中心的配置文件的匹配規(guī)則及說明

    Nacos配置中心的配置文件的匹配規(guī)則及說明

    這篇文章主要介紹了Nacos配置中心的配置文件的匹配規(guī)則及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Android中Parcelable的作用實(shí)例解析

    Android中Parcelable的作用實(shí)例解析

    這篇文章主要介紹了Android中Parcelable的作用,對(duì)于Android初學(xué)者有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2014-08-08
  • 深入理解java代碼實(shí)現(xiàn)分治算法

    深入理解java代碼實(shí)現(xiàn)分治算法

    分治算法是一種遞歸算法,它將問題劃分為幾個(gè)獨(dú)立的子問題,然后遞歸地解決這些子問題,最后將子問題的解合并起來得到原問題的解,本文詳細(xì)的介紹java分治算法,感興趣的可以了解一下
    2023-09-09
  • JPA?使用criteria簡(jiǎn)單查詢工具類方式

    JPA?使用criteria簡(jiǎn)單查詢工具類方式

    這篇文章主要介紹了JPA?使用criteria簡(jiǎn)單查詢工具類方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Mybatis四種分頁方式小結(jié)

    Mybatis四種分頁方式小結(jié)

    本文詳細(xì)介紹MyBatis中四種分頁方式:數(shù)組分頁、SQL分頁、RowBounds分頁及攔截器分頁,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-07-07
  • 關(guān)于Spring源碼深度解析(AOP功能源碼解析)

    關(guān)于Spring源碼深度解析(AOP功能源碼解析)

    這篇文章主要介紹了關(guān)于Spring源碼深度解析(AOP功能源碼解析),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • SpringBoot整合Redis實(shí)現(xiàn)常用功能超詳細(xì)過程

    SpringBoot整合Redis實(shí)現(xiàn)常用功能超詳細(xì)過程

    這篇文章主要介紹了SpringBoot整合Redis實(shí)現(xiàn)常用功能,登陸功能是每個(gè)項(xiàng)目必備的功能吧,但是想設(shè)計(jì)好,卻是很難,下面介紹兩種登陸功能的解決方式,需要的朋友可以參考下
    2022-08-08
  • java實(shí)現(xiàn)文件切片上傳百度云+斷點(diǎn)續(xù)傳的方法

    java實(shí)現(xiàn)文件切片上傳百度云+斷點(diǎn)續(xù)傳的方法

    文件續(xù)傳在很多地方都可以用的到,本文主要介紹了java實(shí)現(xiàn)文件切片上傳百度云+斷點(diǎn)續(xù)傳的方法,?文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • k8s中java如何設(shè)置jvm堆棧大小不超過request/limit

    k8s中java如何設(shè)置jvm堆棧大小不超過request/limit

    這篇文章主要介紹了k8s中java如何設(shè)置jvm堆棧大小不超過request/limit問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-07-07

最新評(píng)論

礼泉县| 长白| 湟源县| 建始县| 漳平市| 布尔津县| 南投县| 新密市| 阿克苏市| 蕲春县| 广河县| 来安县| 武汉市| 遵化市| 车险| 库尔勒市| 桐城市| 潞城市| 烟台市| 陆丰市| 遂溪县| 宁明县| 屯门区| 镶黄旗| 科技| 喀什市| 雷山县| 镇坪县| 新平| 天水市| 乌兰县| 达孜县| 海口市| 洮南市| 克拉玛依市| 青冈县| 康平县| 成都市| 手机| 潢川县| 都昌县|