輕輕鬆鬆學習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,如果本地要連線,同時還受防火牆等影響,建議詢問運維同事