SpringBoot整合之SpringBoot整合MongoDB的詳細步驟

MongoDB 是一個基於分佈式文件存儲的數據庫。由 C++ 語言編寫。旨在為 WEB 應用提供可擴展的高性能數據存儲解決方案。

MongoDB 是一個介於關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。本文介紹SpringBoot整合之SpringBoot整合MongoDB的步驟。

一、創建項目,選擇依賴

僅選擇Spring Web、Spring Data MongoDB即可



二、引入相關依賴(非必要)

這裡隻是為瞭實體類的創建方便而引入lombok

<!-- 引入lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

三、如果是第一次使用MongoDB,首先先創建用戶

> use admin
switched to db admin
> db.createUser({user:"zlfeng", pwd:"123456", roles:[{role:"readWriteAnyDatabase", db:"admin"}]});
Successfully added user: {
	"user" : "zlfeng",
	"roles" : [
		{
			"role" : "readWriteAnyDatabase",
			"db" : "admin"
		}
	]
}

MongoDB權限介紹

權限 說明
read 允許用戶讀取指定數據庫
readWrite 允許用戶讀寫指定數據庫
dbAdmin 允許用戶在指定數據庫中執行管理函數,如索引創建、刪除、查看統計或訪問system.profile
userAdmin 允許用戶向system.users集合寫入,可以在指定數據庫中創建、刪除和管理用戶
clusterAdmin 必須在admin數據庫中定義,賦予用戶所有分片和復制集相關函數的管理權限
readAnyDatabase 必須在admin數據庫中定義,賦予用戶所有數據庫的讀權限
readWriteAnyDatabase 必須在admin數據庫中定義,賦予用戶所有數據庫的讀寫權限
userAdminAnyDatabase 必須在admin數據庫中定義,賦予用戶所有數據庫的userAdmin權限
dbAdminAnyDatabase 必須在admin數據庫中定義,賦予用戶所有數據庫的dbAdmin權限
root 必須在admin數據庫中定義,超級賬號,超級權限

四、定義核心配置文件

# 登錄用戶所在的數據庫
spring.data.mongodb.authentication-database=admin

# 數據庫的ip地址
spring.data.mongodb.host=192.168.133.142

# MongoDB端口號
spring.data.mongodb.port=27017

# 用戶賬號
spring.data.mongodb.username=zlfeng

# 用戶密碼
spring.data.mongodb.password=123456

# 指定使用的數據庫
# 不必預先創建,不存在該數據庫會自動創建
spring.data.mongodb.database=db_student

五、創建實體類

package cn.byuan.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.Id;

import java.io.Serializable;
import java.util.Date;

@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Data
public class Student implements Serializable {
    @Id// 必須指定id列
    private String studentId;

    private String studentName;

    private Integer studentAge;

    private Double studentScore;
    
    private Date studentBirthday;
}

六、創建dao層,這裡的dao層有兩種寫法

(一)dao層寫法一

1. 編碼部分

package cn.byuan.dao;

import cn.byuan.entity.Student;
import org.springframework.data.mongodb.repository.MongoRepository;

/*
* dao層寫法一
* 這裡的用法其實和SpringDataJPA相似, 可根據需要來自定義方法
*
* 這種寫法不需要寫實現類
*
* MongoRepository<行對應的對象類型, 主鍵列類型>
* */
public interface StudentDaoTypeOne extends MongoRepository<Student, String> {
    
//    可根據需求自己定義方法, 無需對方法進行實現
    Student getAllByStudentName(String studentName);
        
}

2.測試部分

在進行測試之前,我們先查詢一下數據庫,此時不存在db_student的庫

開始測試

package cn.byuan;

import cn.byuan.dao.StudentDaoTypeOne;
import cn.byuan.entity.Student;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Date;
import java.util.List;

@SpringBootTest
class StudentDaoTypeOneTests {

    @Autowired
    private StudentDaoTypeOne studentDaoTypeOne;

    @Test
    void addOneStudent(){
//        插入10行
        for (Integer count = 0; count < 10; count++) {
            Student student = new Student()
                    .setStudentId("student_"+count) //如果自己不去設置id則系統會分配給一個id
                    .setStudentName("Godfery"+count)
                    .setStudentAge(count)
                    .setStudentScore(98.5-count)
                    .setStudentBirthday(new Date());
            studentDaoTypeOne.save(student);
        }
    }

    @Test
    void deleteOneStudentByStudentId(){
//        刪除id為student_0的學生
        studentDaoTypeOne.deleteById("student_0");
    }

    @Test
    void updateOneStudent(){
//        修改姓名為Godfery1的Student年齡為22
        Student student = studentDaoTypeOne.getAllByStudentName("Godfery1");
        student.setStudentAge(22);
        studentDaoTypeOne.save(student);

    }

    @Test
    void getOneStudentByStudentId(){
        System.out.println(studentDaoTypeOne.findById("student_1"));
    }

    @Test
    void getAllStudent(){
        List<Student> studentList = studentDaoTypeOne.findAll();
        studentList.forEach(System.out::println);
    }

}

我們先來查看一下數據庫

進入數據庫查看一下數據

(二)dao層寫法二

1.編碼部分

接口部分

package cn.byuan.dao;

import cn.byuan.entity.Student;

import java.util.List;

/*
* dao層寫法二
*
* 寫法二需要進行實現
* */
public interface StudentDaoTypeTwo {
//    增加一位學生
    void addOneStudent(Student student);

//    根據id刪除一位學生
    void deleteOneStudentByStudentId(String studentId);

//    修改一位學生的信息
    void updateOneStudent(Student student);

//    根據主鍵id獲取一名學生
    Student getOneStudentByStudentId(String studentId);

//    獲取全部學生
    List<Student> getAllStudent();
}

實現類

package cn.byuan.dao.imp;

import cn.byuan.dao.StudentDaoTypeTwo;
import cn.byuan.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public class StudentDaoTypeTwoImp implements StudentDaoTypeTwo {

//    使用MongoTemplate模板類實現數據庫操作
    @Autowired
    private MongoTemplate mongoTemplate;

//    增加一位學生
    public void addOneStudent(Student student){
        mongoTemplate.save(student);

    }

//    根據id刪除一位學生
    public void deleteOneStudentByStudentId(String studentId){
        Student student = mongoTemplate.findById(studentId, Student.class);
        if(student != null){
            mongoTemplate.remove(student);
        }

    }

//    修改一位學生的信息
    public void updateOneStudent(Student student){
        mongoTemplate.save(student);
    }

//    根據主鍵id獲取一名學生
    public Student getOneStudentByStudentId(String studentId){
        return mongoTemplate.findById(studentId, Student.class);
    }

//    獲取全部學生
    public List<Student> getAllStudent(){
        return mongoTemplate.findAll(Student.class);
    }
}

2.測試部分

package cn.byuan;

import cn.byuan.dao.StudentDaoTypeOne;
import cn.byuan.dao.StudentDaoTypeTwo;
import cn.byuan.entity.Student;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Date;
import java.util.List;

@SpringBootTest
class StudentDaoTypeTwoTests {

    @Autowired
    private StudentDaoTypeTwo studentDaoTypeTwo;

    @Test
    void addOneStudent(){
//        插入10行
        for (Integer count = 0; count < 10; count++) {
            Student student = new Student()
                    .setStudentId("study_"+count) //如果自己不去設置id則系統會分配給一個id
                    .setStudentName("Echo"+count)
                    .setStudentAge(count)
                    .setStudentScore(98.5-count)
                    .setStudentBirthday(new Date());
            studentDaoTypeTwo.addOneStudent(student);
        }
    }

    @Test
    void deleteOneStudentByStudentId(){
//        刪除id為study_0的學生
        studentDaoTypeTwo.deleteOneStudentByStudentId("study_0");
    }

    @Test
    void updateOneStudent(){
//        修改id為study_1的Student年齡為21
        Student student = studentDaoTypeTwo.getOneStudentByStudentId("study_1");
        student.setStudentAge(21);
        studentDaoTypeTwo.updateOneStudent(student);

    }

    @Test
    void getOneStudentByStudentId(){
        System.out.println(studentDaoTypeTwo.getOneStudentByStudentId("study_1"));
    }

    @Test
    void getAllStudent(){
        List<Student> studentList = studentDaoTypeTwo.getAllStudent();
        studentList.forEach(System.out::println);
    }

}

進入數據庫查看一下數據

源碼地址:https://github.com/byuan98/springboot-integration/tree/master/test008_springboot_mongodb

到此這篇關於SpringBoot整合之SpringBoot整合MongoDB的詳細步驟的文章就介紹到這瞭,更多相關SpringBoot整合MongoDB內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

到此這篇關於SpringBoot整合之SpringBoot整合MongoDB的詳細步驟的文章就介紹到這瞭,更多相關SpringBoot整合MongoDB內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: