SpringBoot集成Mongodb的操作方法
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 exception: $concat only supports strings, not Number
這篇文章主要介紹了mongodb exception: $concat only supports strings, not NumberInt32解決辦法,需要的朋友可以參考下2014-06-06MongoDb的"not master and slaveok=false"錯誤及解決方法
今天小編就為大家分享一篇關(guān)于MongoDb的"not master and slaveok=false"錯誤及解決方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10MongoDB磁盤空間占滿導致數(shù)據(jù)庫被鎖定的解決方法
我在實際項目中,遇到一個問題,隨著數(shù)據(jù)每天的不斷增加,導致mongodb的磁盤空間站滿了,數(shù)據(jù)庫被鎖了,無法使用,所以本文給大家介紹了清理MongoDB數(shù)據(jù)和磁盤空間的方法,需要的朋友可以參考下2024-04-04window平臺安裝MongoDB數(shù)據(jù)庫圖文詳解
本篇文章主要介紹了window平臺安裝MongoDB數(shù)據(jù)庫圖文詳解,主要介紹window下面安裝mogod的步驟和使用細節(jié)。感興趣的小伙伴們可以參考一下。2016-11-11