Springboot整合MongoDB進行CRUD操作的兩種方式(例項程式碼詳解)
1 簡介
Springboot
是最簡單的使用Spring
的方式,而MongoDB
是最流行的NoSQL
資料庫。兩者在分散式、微服務架構中使用率極高,本文將用例項介紹如何在Springboot
中整合MongoDB
的兩種方法:MongoRepository
和MongoTemplate
。
程式碼結構如下:
2 專案準備
2.1 啟動MongoDB例項
為了方便,使用Docker
來啟動MongoDB
,詳細指導文件請參考:基於Docker的MongoDB實現授權訪問的方法 ,這裡不再贅述。
2.2 引入相關依賴
主要的依賴為Web
和MongoDB
的starter
,把下面程式碼加入到pom.xml
中即可:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
2.3 配置資料庫連線資訊
與配置MySQL
或Oracle
一樣,MongoDB
也需要配置連線資訊,配置在application.properties
中如下:
server.port=8080 spring.data.mongodb.authentication-database=admin spring.data.mongodb.database=testdb spring.data.mongodb.username=user spring.data.mongodb.password=123456 spring.data.mongodb.host=localhost spring.data.mongodb.port=27017
2.4 建立資料模型實體
建立User
類如下:
package com.pkslow.mongo.model; import org.springframework.data.annotation.Id; import java.util.Date; public class User { @Id private String userId; private String name; private Integer age; private Date createTime = new Date(); public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } }
不需要在MongoDB
中建立對應的Collections
(表),當通過Web應用新增時會自動建立。
3 方式1:MongoRepository
3.1 定義資料訪問層UserRepository
使用過Spring Jpa
的都清楚,Repository
實際就是用於操作資料庫的類。在非關係型資料庫MongoDB
的整合中,也是一樣的。Spring
會幫我們實現好對應介面的方法,開發人員連SQL
都不用寫,非常省心。程式碼如下:
package com.pkslow.mongo.dal; import com.pkslow.mongo.model.User; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Repository; @Repository public interface UserRepository extends MongoRepository<User,String> { }
注意MongoRepository
後面接的泛型<User,String>
第一個為實體類,第二個為主鍵ID
。
3.2 實現Controller
Controller
比較基礎,就不講解了,常用的註解是必須要掌握的,直接上程式碼吧:
package com.pkslow.mongo.contrlloer; import com.pkslow.mongo.dal.UserRepository; import com.pkslow.mongo.model.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/user") public class UserController { @Autowired private final UserRepository userRepository; public UserController(UserRepository userRepository) { this.userRepository = userRepository; } @GetMapping("") public List<User> getAllUsers() { return userRepository.findAll(); } @GetMapping("/{userId}") public User getByUserId(@PathVariable String userId) { return userRepository.findById(userId).orElse(new User()); } @PostMapping("") public User addNewUser(@RequestBody User user) { return userRepository.save(user); } @DeleteMapping("/{userId}") public String delete(@PathVariable String userId) { User user = new User(); user.setUserId(userId); userRepository.deleteById(userId); return "deleted: " + userId; } @PutMapping("") public User update(@RequestBody User user) { return userRepository.save(user); } }
注意程式碼沒有做異常情況的判斷和處理,這裡為了快速演示,就先不管了。
3.3 測試
用Postman
測試後,每個介面均呼叫成功。就不一一截圖了。
4 方式2:MongoTemplate
4.1 定義資料訪問層UserDAL
先定義介面為:
package com.pkslow.mongo.dal; import com.pkslow.mongo.model.User; import java.util.List; public interface UserDAL { List<User> findAll(); User findById(String userId); User save(User user); void deleteById(String userId); }
然後實現該介面如下:
package com.pkslow.mongo.dal; import com.pkslow.mongo.model.User; 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.stereotype.Repository; import java.util.List; @Repository public class UserDALImpl implements UserDAL { @Autowired private MongoTemplate template; @Override public List<User> findAll() { return template.findAll(User.class); } @Override public User findById(String userId) { return template.findById(userId,User.class); } @Override public User save(User user) { return template.save(user); } @Override public void deleteById(String userId) { Query query = new Query(); query.addCriteria(Criteria.where("userId").is(userId)); template.remove(query,User.class); } }
4.2 實現另一個Controller
這個Controller
的程式碼與之前的基本一樣,只是資料訪問類不一樣,程式碼如下:
package com.pkslow.mongo.contrlloer; import com.pkslow.mongo.dal.UserDAL; import com.pkslow.mongo.model.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/userTemplate") public class UserTemplateController { @Autowired private final UserDAL userDAL; public UserTemplateController(UserDAL userDAL) { this.userDAL = userDAL; } @GetMapping("") public List<User> getAllUsers() { return userDAL.findAll(); } @GetMapping("/{userId}") public User getByUserId(@PathVariable String userId) { return userDAL.findById(userId); } @PostMapping("") public User addNewUser(@RequestBody User user) { return userDAL.save(user); } @DeleteMapping("/{userId}") public String delete(@PathVariable String userId) { User user = new User(); user.setUserId(userId); userDAL.deleteById(userId); return "deleted: " + userId; } @PutMapping("") public User update(@RequestBody User user) { return userDAL.save(user); } }
4.3 測試
測試一樣也是全部通過:
5 總結
本文通過例項講解了如何整合Springboot
和MongoDB
,主要有兩種方法:MongoRepository
和MongoTemplate
。程式碼基本在文章中已經貼出來了,需要的可以下載原始碼。
連結: https://pan.baidu.com/s/1bSu4rIkK4f7UIIWW_fZT7A 提取碼: 2uei
到此這篇關於Springboot整合MongoDB進行CRUD操作的兩種方式的文章就介紹到這了,更多相關Springboot整合MongoDB crud 操作內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!