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

SpringBoot整合之SpringBoot整合MongoDB的詳細(xì)步驟

 更新時間:2021年07月11日 08:51:55   作者:張雷鋒  
這篇文章主要介紹了SpringBoot整合之SpringBoot整合MongoDB的詳細(xì)步驟,本文通過圖文實例代碼相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

MongoDB 是一個基于分布式文件存儲的數(shù)據(jù)庫。由 C++ 語言編寫。旨在為 WEB 應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲解決方案。

MongoDB 是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。本文介紹SpringBoot整合之SpringBoot整合MongoDB的步驟。

一、創(chuàng)建項目,選擇依賴

僅選擇Spring Web、Spring Data MongoDB即可



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

這里只是為了實體類的創(chuàng)建方便而引入lombok

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

三、如果是第一次使用MongoDB,首先先創(chuàng)建用戶

> 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權(quán)限介紹

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

四、定義核心配置文件

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

# 數(shù)據(jù)庫的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

# 指定使用的數(shù)據(jù)庫
# 不必預(yù)先創(chuàng)建,不存在該數(shù)據(jù)庫會自動創(chuàng)建
spring.data.mongodb.database=db_student

五、創(chuàng)建實體類

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;
}

六、創(chuàng)建dao層,這里的dao層有兩種寫法

(一)dao層寫法一

1. 編碼部分

package cn.byuan.dao;

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

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

2.測試部分

在進(jìn)行測試之前,我們先查詢一下數(shù)據(jù)庫,此時不存在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) //如果自己不去設(shè)置id則系統(tǒng)會分配給一個id
                    .setStudentName("Godfery"+count)
                    .setStudentAge(count)
                    .setStudentScore(98.5-count)
                    .setStudentBirthday(new Date());
            studentDaoTypeOne.save(student);
        }
    }

    @Test
    void deleteOneStudentByStudentId(){
//        刪除id為student_0的學(xué)生
        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);
    }

}

我們先來查看一下數(shù)據(jù)庫

進(jìn)入數(shù)據(jù)庫查看一下數(shù)據(jù)

(二)dao層寫法二

1.編碼部分

接口部分

package cn.byuan.dao;

import cn.byuan.entity.Student;

import java.util.List;

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

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

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

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

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

實現(xiàn)類

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模板類實現(xiàn)數(shù)據(jù)庫操作
    @Autowired
    private MongoTemplate mongoTemplate;

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

    }

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

    }

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

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

//    獲取全部學(xué)生
    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) //如果自己不去設(shè)置id則系統(tǒng)會分配給一個id
                    .setStudentName("Echo"+count)
                    .setStudentAge(count)
                    .setStudentScore(98.5-count)
                    .setStudentBirthday(new Date());
            studentDaoTypeTwo.addOneStudent(student);
        }
    }

    @Test
    void deleteOneStudentByStudentId(){
//        刪除id為study_0的學(xué)生
        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);
    }

}

進(jìn)入數(shù)據(jù)庫查看一下數(shù)據(jù)

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

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

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

相關(guān)文章

  • Java中的Object.getClass()方法解析

    Java中的Object.getClass()方法解析

    這篇文章主要介紹了Java中的Object.getClass()方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Mybatis的xml中使用if/else標(biāo)簽的具體使用

    Mybatis的xml中使用if/else標(biāo)簽的具體使用

    本文主要介紹了Mybatis的xml中使用if/else標(biāo)簽的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Java使用觀察者模式實現(xiàn)氣象局高溫預(yù)警功能示例

    Java使用觀察者模式實現(xiàn)氣象局高溫預(yù)警功能示例

    這篇文章主要介紹了Java使用觀察者模式實現(xiàn)氣象局高溫預(yù)警功能,結(jié)合完整實例形式分析了java觀察者模式實現(xiàn)氣象局高溫預(yù)警的相關(guān)接口定義、使用、功能操作技巧,并總結(jié)了其設(shè)計原則與適用場合,具有一定參考借鑒價值,需要的朋友可以參考下
    2018-04-04
  • Java中的適配器模式詳解

    Java中的適配器模式詳解

    這篇文章主要介紹了Java中的適配器模式詳解,適配器模式(Adapter?Pattern)將某個類的接口轉(zhuǎn)換成客戶端期望的另一個接口表示,主的目的是兼容性,讓原本因接口不匹配不能一起工作的兩個類可以協(xié)同工作,需要的朋友可以參考下
    2023-09-09
  • JavaGUI界面實現(xiàn)頁面跳轉(zhuǎn)方法

    JavaGUI界面實現(xiàn)頁面跳轉(zhuǎn)方法

    這篇文章主要給大家介紹了關(guān)于JavaGUI界面實現(xiàn)頁面跳轉(zhuǎn)的相關(guān)資料, GUI是指圖形用戶界面,指采用圖形方式顯示的計算機(jī)操作用戶界面,需要的朋友可以參考下
    2023-07-07
  • 詳解IDEA2020新建spring項目和c3p0連接池的創(chuàng)建和使用

    詳解IDEA2020新建spring項目和c3p0連接池的創(chuàng)建和使用

    C3P0是一個開源的JDBC連接池,它實現(xiàn)了數(shù)據(jù)源和JNDI綁定,本文就使用Spring實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Swing拆分窗格控件JSplitPane使用詳解

    Swing拆分窗格控件JSplitPane使用詳解

    這篇文章主要為大家詳細(xì)介紹了Swing拆分窗格控件JSplitPane的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 微服務(wù)之Feign的介紹與使用小結(jié)

    微服務(wù)之Feign的介紹與使用小結(jié)

    Feign 是一個聲明式的偽RPC的REST客戶端,它用了基于接口的注解方式,很方便的客戶端配置,Spring Cloud 給 Feign 添加了支持Spring MVC注解,并整合Ribbon及Eureka進(jìn)行支持負(fù)載均衡,這篇文章主要介紹了微服務(wù)之Feign的介紹與使用,需要的朋友可以參考下
    2022-07-07
  • Java實現(xiàn)文件切割拼接的實現(xiàn)代碼

    Java實現(xiàn)文件切割拼接的實現(xiàn)代碼

    這篇文章主要介紹了Java實現(xiàn)文件切割拼接的實現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Java使用正則表達(dá)式判斷獨(dú)立字符的存在(代碼示例)

    Java使用正則表達(dá)式判斷獨(dú)立字符的存在(代碼示例)

    通過使用正則表達(dá)式,我們可以更加靈活地判斷字符串中是否包含特定的字符,并且可以控制匹配的條件,如獨(dú)立的字符,這為我們處理字符串提供了更多的選擇和功能,這篇文章主要介紹了Java使用正則表達(dá)式判斷獨(dú)立字符的存在,需要的朋友可以參考下
    2023-10-10

最新評論

濮阳市| 封开县| 连平县| 治多县| 建平县| 堆龙德庆县| 墨竹工卡县| 仁寿县| 甘南县| 西乌珠穆沁旗| 松江区| 沭阳县| 顺平县| 翁牛特旗| 山阴县| 合川市| 沙洋县| 泰和县| 石狮市| 廊坊市| 台江县| 沙洋县| 曲麻莱县| 金华市| 和林格尔县| 博兴县| 襄樊市| 独山县| 克东县| 甘洛县| 福建省| 察哈| 青州市| 航空| 建始县| 贵南县| 会泽县| 博乐市| 宁城县| 安义县| 吉首市|