1. 程式人生 > >輕輕鬆鬆學習SpringBoot2:第二十五篇: Spring Boot和Mongodb整合(完整版)

輕輕鬆鬆學習SpringBoot2:第二十五篇: Spring Boot和Mongodb整合(完整版)

今天主要講的是Spring Boot和Mongodb整合

我們先來回顧一下前面章節的相關內容

前面我們講了SpringBoot和mysql整合,並且講了操作資料庫的幾種方式

自動生成表

資料庫操作

操作篇

回到正題,mongodb的安裝在這就不累述了,win版本的去官網下載,然後一直下一步即可,安裝完之後需要db位置,類似命令如下mkdir db,然後進入到mongodb安裝目錄MongoDB\Server\4.0\bin,執行命令mongod --dbpath XX路徑/db

然後再MongoDB\Server\4.0\bin目錄下執行命令mongo.exe,即可進入mongodb語句輸入欄


我們在mongo命令欄中輸入show databases;看到預設有三個資料庫,也可以使用命令 show dbs

下面我們直接進入程式碼操作

先看一下pom.xml檔案新增依賴項

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
再看下程式碼結構和涉及到的程式碼分佈


從上到下依次是MongoTestC.java,MongoTestDao.java,MongoTest.java,application.yml

分別對應著頁面跳轉類,操作mongodb資料庫的類和實體類以及配置檔案(此處只是做個demo,所以沒有寫service層,相關操作都寫到了Controller中去了)

MongoTestC.java

package com.example.smybatis.controller;

import com.example.smybatis.dao.MongoTestDao;
import com.example.smybatis.model.MongoTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MongoTestC {

    @Autowired
    private MongoTestDao mtdao;

    @GetMapping(value="/test1")
    public void saveTest() throws Exception {
        MongoTest mgtest=new MongoTest();
        mgtest.setId(11);
        mgtest.setAge(33);
        mgtest.setName("ceshi");
        mtdao.saveTest(mgtest);
    }

    @GetMapping(value="/test2")
    public MongoTest findTestByName(){
        MongoTest mgtest= mtdao.findTestByName("ceshi");
        System.out.println("mgtest is "+mgtest);
        return mgtest;
    }

    @GetMapping(value="/test3")
    public void updateTest(){
        MongoTest mgtest=new MongoTest();
        mgtest.setId(11);
        mgtest.setAge(44);
        mgtest.setName("ceshi2");
        mtdao.updateTest(mgtest);
    }

    @GetMapping(value="/test4")
    public void deleteTestById(){
        mtdao.deleteTestById(11);
    }
}

MongoTestDao.java

package com.example.smybatis.dao;

import com.example.smybatis.model.MongoTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;

@Component
public class MongoTestDao {


    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 建立物件
     */
    public void saveTest(MongoTest test) {
        mongoTemplate.save(test);
    }

    /**
     * 根據使用者名稱查詢物件
     * @return
     */
    public MongoTest findTestByName(String name) {
        Query query=new Query(Criteria.where("name").is(name));
        MongoTest mgt =  mongoTemplate.findOne(query , MongoTest.class);
        return mgt;
    }

    /**
     * 更新物件
     */
    public void updateTest(MongoTest test) {
        Query query=new Query(Criteria.where("id").is(test.getId()));
        Update update= new Update().set("age", test.getAge()).set("name", test.getName());
        //更新查詢返回結果集的第一條
        mongoTemplate.updateFirst(query,update,MongoTest.class);
        //更新查詢返回結果集的所有
        // mongoTemplate.updateMulti(query,update,TestEntity.class);
    }

    /**
     * 刪除物件
     * @param id
     */
    public void deleteTestById(Integer id) {
        Query query=new Query(Criteria.where("id").is(id));
        mongoTemplate.remove(query,MongoTest.class);
    }
}

MongoTest.java

package com.example.smybatis.model;

public class MongoTest {
    private Integer id;
    private Integer age;
    private String name;

    public Integer getId() {
        return id;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

application.yml

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

此處我用的是本地安裝的mongodb,所以沒有使用者名稱和密碼,有使用者名稱和密碼的格式是

spring.data.mongodb.uri=mongodb://name:[email protected]:27017/test,其中name是使用者名稱,pass是密碼

如果要配置多個數據庫,則中間用","分割,例如

spring.data.mongodb.uri=mongodb://192.168.1.1:20000,192.168.1.2:20000,192.168.252.12:20000/test

下面我們啟動程式進行測試

1)新增

我們先在瀏覽器輸入http://localhost:1234/test1

呼叫了controller中的新增方法,此時資料庫應該有值,我們執行相關命令看一下


我們發現,我們使用use test命令建立新庫的時候,當庫裡還沒有表的時候,我們使用show dbs是看不到這個庫的,

當我們在瀏覽器敲了回車之後,我們發現可以看到test庫了,同時test庫中也有了mongoTest表,使用db.mongoTest.find()命令就可以看到資料了,符合要求

2)查詢

我們在瀏覽器輸入http://localhost:1234/test2

即可檢視到剛才插入的那條資料


3)修改

我們在瀏覽器輸入http://localhost:1234/test3

然後去資料庫看一下


果然發生了變化

4)刪除

我們在瀏覽器輸入http://localhost:1234/test4

然後去資料庫看一下

我們發現,資料沒有了,因為已經被刪掉了,但是表還是存在的,庫也可以看到

貼士:有童鞋問我,如果是阿里雲如何連線,阿里雲分內外網ip,如果本地要連線,同時還受防火牆等影響,建議詢問運維同事