欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot集成Mongodb的操作方法

 更新時間:2024年11月09日 14:12:05   作者:小疙瘩的編程之路  
本文介紹了MongoDB的基本概念、Docker安裝步驟、SpringBoot整合MongoDB的方法,以及MongoRepository和MongoTemplate的區(qū)別,感興趣的朋友一起看看吧

1.什么是mongoDB?

    MongoDB是一種非關(guān)系型數(shù)據(jù)庫,被廣泛用于大型數(shù)據(jù)存儲和分布式系統(tǒng)的構(gòu)建。MongoDB支持的數(shù)據(jù)模型比傳統(tǒng)的關(guān)系型數(shù)據(jù)庫更加靈活,支持動態(tài)查詢和索引,也支持json格式和bson格式的數(shù)據(jù)存儲,這種格式可以支持讀取和寫入大量的數(shù)據(jù)。

2.Docker安裝mongoDB

2.1拉取鏡像

docker pull mongo:4.4

2.2創(chuàng)建mongo數(shù)據(jù)持久化目錄 (看自己愛好,放哪里都行)

mkdir -p /docker_volume/mongodb/data

2.3啟動容器

docker run -itd --name mongo -v /docker_volume/mongodb/data:/data/db -p 27017:27017 mongo:4.4 --auth

2.4創(chuàng)建用戶  

 1.使用以下命令進入容器的 MongoDB shell:

docker exec -it mongo mongo admin

  2.創(chuàng)建一個用戶,mongo 默認沒有用戶

    
db.createUser({
  user: 'root',
  pwd: 'xgd@123',
  roles: [
    { role: 'readWriteAnyDatabase', db: 'admin' },
    { role: 'dbAdminAnyDatabase', db: 'admin' }
  ]
});

命令解釋:

-d:表示在后臺運行容器,并返回容器 ID。

-i:表示交互式運行容器,保留 STDIN 打開。

--name mongo-service:為容器指定一個名稱,這里為 mongo-service。

--restart=always:表示在容器退出后自動重啟容器。

-p 27017:27017:將容器的 27017 端口映射到宿主機的 27017 端口。

-v ~/data/mongodata:/data:將宿主機的 ~/data/mongodata 目錄掛載到容器的 /data 目錄下,用于持久化存儲數(shù)據(jù)。

mongo:指定要運行的鏡像名稱,這里為官方的 MongoDB 鏡像。

3.SpringBoot整合MongoDB步驟

 1.導入依賴

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

2.配置

spring:
  data:
    mongodb:
      host: 你的ip
      port: 27017
      username: root
      password: 123
      authenticationDatabase: admin
      database: test

3.操作MongoDB     第一種方式使用MongoTemplate‌工具類   添加實體類

import lombok.Data;
import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable;
import java.util.Date;
/**
 * 映射表 test_demo
 */
@Data
@Document("test_demo")
public class TestDemo implements Serializable {
    private static final long serialVersionUID = 1L;
    private String id;
    private String name;
    private Date birthDay;
}

  測試

/**
 * MongoDB測試類
 * */
@SpringBootTest(classes = MongoApplication.class)
@RunWith(SpringRunner.class)
public class MongoTest1 {
    @Autowired
    private MongoTemplate mongoTemplate;
    //保存
    @Test
    public void saveTest(){
        for (int i = 0; i < 10; i++) {
            TestDemo testDemo = new TestDemo();
            testDemo.setName("張三");
            testDemo.setBirthDay(new Date());
             mongoTemplate.save(testDemo);
        }
        TestDemo testDemo = new TestDemo();
        testDemo.setName("張三你吃飯了嗎");
        testDemo.setBirthDay(new Date());
        mongoTemplate.save(testDemo);
    }
    //查詢一個
    @Test
    public void saveFindOne(){
        TestDemo testDemo = mongoTemplate.findById("661743b77bee2f0a5739819d", TestDemo.class);
        System.out.println(testDemo);
        //TestDemo(id=661743b77bee2f0a5739819d, name=張三, birthDay=Thu Apr 11 09:58:15 CST 2024)
    }
    //條件查詢
    @Test
    public void testQuery(){
        //查詢字段name為張三的數(shù)據(jù)(多條件查詢)
        Query query = Query.query(Criteria.where("name").is("張三"))
                .with(Sort.by(Sort.Direction.DESC,"birthDay"));
        // 執(zhí)行查詢 模糊查詢 只查詢5條數(shù)據(jù)
        Query query1 = Query.query(Criteria.where("name").regex(".*?\\" + "張三" + ".*"));
        query.limit(5);
        List<TestDemo> list = mongoTemplate.find(query, TestDemo.class);
        List<TestDemo> list1 = mongoTemplate.find(query1, TestDemo.class);
        System.out.println("list:"+list);
        System.out.println("list1:"+list1);
    }
    //測試刪除
    @Test
    public void testDel(){
        mongoTemplate.remove(Query.query(Criteria.where("name").is("張三")),TestDemo.class);
    }
}

第二種方式使用繼承MongoRepository   

添加實體類

package com.xsp.spm.domain;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
/**
 * @Author:xsp
 * @Description:
 * @name:User
 * @Date:2024/9/14 17:24
 */
@Data
@Document(collection = "users")
public class User {
    @Id
    private String id;
    @Indexed(unique = true)
    private String name;
    private Integer age;
}

repository層

package com.xsp.spm.repository;
import com.xsp.spm.domain.User;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
/**
 * @Author:xsp
 * @Description:
 * @name:UserRepository
 * @Date:2024/9/14 17:25
 */
@Repository
public interface UserRepository extends MongoRepository<User, String> {
}

controller層

package com.xsp.spm.controller;
import com.xsp.spm.domain.User;
import com.xsp.spm.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.web.bind.annotation.*;
/**
 * @Author:xsp
 * @Description:
 * @name:UserController
 * @Date:2024/9/14 17:26
 */
@RestController
public class UserController {
    @Autowired
    private UserRepository userRepository;
    // 添加
    @PostMapping
    public User createUser(@RequestBody User user) {
        return userRepository.save(user);
    }
    // 詳細
    @GetMapping("/{id}")
    public User getUser(@PathVariable String id) {
        return userRepository.findById(id).orElse(null);
    }
    // 刪除
    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable String id) {
        userRepository.deleteById(id);
    }
    // 修改
    @PutMapping("/{id}")
    public User updateUser(@PathVariable String id, @RequestBody User user) {
        User userFromDb = userRepository.findById(id).orElse(null);
        if (userFromDb != null) {
            userFromDb.setName(user.getName());
            userFromDb.setAge(user.getAge());
            return userRepository.save(userFromDb);
        }
        return null;
    }
    // 列表
    @GetMapping
    public Iterable<User> getAllUsers() {
        return userRepository.findAll();
    }
}

mongoDB 中MongoRepository和MongoTemplate的區(qū)別

MongoRepository‌:

      特點‌:MongoRepository是Spring Data MongoDB的一部分,它提供了一種面向?qū)ο蟮姆绞絹聿僮鱉ongoDB。通過繼承MongoRepository接口,可以很容易地實現(xiàn)CRUD操作和一些基本的查詢操作。這種方式不需要編寫原生的查詢語句,使得操作更加簡單和直觀‌1。

‌       適用場景‌:當查詢需求簡單,可以通過方法名命名規(guī)則進行快速的CRUD操作時,使用MongoRepository是一個不錯的選擇。它適用于基本的CRUD操作和一些簡單查詢,但如果需要執(zhí)行復雜的聚合或定制查詢,可能不夠靈活‌1。

MongoTemplate‌:

    特點‌:MongoTemplate是Spring Data MongoDB中更低級別的工具,它提供了更豐富的操作方法,包括條件查詢、模糊查詢、分頁查詢、數(shù)據(jù)修改和刪除等。MongoTemplate允許更靈活的操作,包括原生的查詢語句,提供了更大的靈活性來處理復雜的查詢和數(shù)據(jù)操作‌2。

 ‌    適用場景‌:當需要執(zhí)行復雜的查詢或定制操作時,MongoTemplate可以彌補MongoRepository的不足。它適用于需要更多控制和靈活性的場景,如執(zhí)行復雜的聚合查詢或定制的數(shù)據(jù)處理任務(wù)‌

總結(jié)來說,MongoRepository適合簡單的CRUD操作和一些基本的查詢需求,而MongoTemplate則提供了更豐富的功能和更大的靈活性,適用于需要執(zhí)行復雜查詢或定制操作的場景。選擇使用哪一個取決于具體的應(yīng)用需求和技術(shù)棧‌

4.navicat連接mongoDB

到此這篇關(guān)于SpringBoot集成Mongodb的文章就介紹到這了,更多相關(guān)SpringBoot集成Mongodb內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MongoDB部署超詳細步驟記錄

    MongoDB部署超詳細步驟記錄

    這篇文章主要介紹了MongoDB部署超詳細步驟的相關(guān)資料,包括了MongoDB的安裝配置、MongoDB?Shell的安裝、常用命令操作及備份與恢復方法,需要的朋友可以參考下
    2025-03-03
  • mongodb exception: $concat only supports strings, not NumberInt32解決辦法

    mongodb exception: $concat only supports strings, not Number

    這篇文章主要介紹了mongodb exception: $concat only supports strings, not NumberInt32解決辦法,需要的朋友可以參考下
    2014-06-06
  • 淺談MongoDB 關(guān)系

    淺談MongoDB 關(guān)系

    這篇文章主要介紹了MongoDB 關(guān)系的相關(guān)資料,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • CentOS8?安裝MongoDB?本地連接的操作方法

    CentOS8?安裝MongoDB?本地連接的操作方法

    MongoDB 是一個由 C++ 語言編寫的基于分布式文件存儲的數(shù)據(jù)庫,MongoDB 是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當中功能最豐富,最像關(guān)系數(shù)據(jù)庫的,這篇文章主要介紹了CentOS8?安裝MongoDB?本地連接,需要的朋友可以參考下
    2022-11-11
  • MongoDB教程之基本管理命令

    MongoDB教程之基本管理命令

    這篇文章主要介紹了MongoDB教程之基本管理命令,本文講解了啟動和停止MongoDB、服務(wù)器狀態(tài)監(jiān)控兩部份內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • MongoDb的

    MongoDb的"not master and slaveok=false"錯誤及解決方法

    今天小編就為大家分享一篇關(guān)于MongoDb的"not master and slaveok=false"錯誤及解決方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • MongoDB磁盤空間占滿導致數(shù)據(jù)庫被鎖定的解決方法

    MongoDB磁盤空間占滿導致數(shù)據(jù)庫被鎖定的解決方法

    我在實際項目中,遇到一個問題,隨著數(shù)據(jù)每天的不斷增加,導致mongodb的磁盤空間站滿了,數(shù)據(jù)庫被鎖了,無法使用,所以本文給大家介紹了清理MongoDB數(shù)據(jù)和磁盤空間的方法,需要的朋友可以參考下
    2024-04-04
  • mongodb 3.4下遠程連接認證失敗的解決方法

    mongodb 3.4下遠程連接認證失敗的解決方法

    這篇文章主要給大家介紹了在mongodb 3.4下遠程連接認證失敗的解決方法,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編一起來學習學習吧。
    2017-06-06
  • mongodb字段值自增長實現(xiàn)代碼

    mongodb字段值自增長實現(xiàn)代碼

    這篇文章主要介紹了mongodb字段值自增長實現(xiàn),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • window平臺安裝MongoDB數(shù)據(jù)庫圖文詳解

    window平臺安裝MongoDB數(shù)據(jù)庫圖文詳解

    本篇文章主要介紹了window平臺安裝MongoDB數(shù)據(jù)庫圖文詳解,主要介紹window下面安裝mogod的步驟和使用細節(jié)。感興趣的小伙伴們可以參考一下。
    2016-11-11

最新評論