Springboot
是最簡單的使用Spring
的方式,而MongoDB
是最流行的NoSQL
數據庫。兩者在分布式、微服務架構中使用率極高,本文將用實例介紹如何在Springboot
中整合MongoDB
的兩種方法:MongoRepository
和MongoTemplate
。
代碼結構如下:
dubbo的整個調用過程?為了方便,使用Docker
來啟動MongoDB
,詳細指導文檔請參考:用Docker安裝一個MongoDB最新版玩玩 ,這里不再贅述。
主要的依賴為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>
與配置MySQL
或Oracle
一樣,MongoDB
也需要配置連接信息,配置在application.properties
中如下:
server.port=8080spring.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
創建User
類如下:
package com.pkslow.mongo.model;import org.springframework.data.annotation.Id;
import java.util.Date;public class User {@Idprivate 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;}
}
dubbo接口調用、不需要在MongoDB
中創建對應的Collections
(表),當通過Web應用新增時會自動創建。
使用過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
。
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 {@Autowiredprivate 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);}
}
java連接mongodb數據庫、注意代碼沒有做異常情況的判斷和處理,這里為了快速演示,就先不管了。
用Postman
測試后,每個接口均調用成功。就不一一截圖了。
先定義接口為:
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);
}
Springboot框架、然后實現該接口如下:
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 {@Autowiredprivate MongoTemplate template;@Overridepublic List<User> findAll() {return template.findAll(User.class);}@Overridepublic User findById(String userId) {return template.findById(userId,User.class);}@Overridepublic User save(User user) {return template.save(user);}@Overridepublic void deleteById(String userId) {Query query = new Query();query.addCriteria(Criteria.where("userId").is(userId));template.remove(query, User.class);}
}
這個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 {@Autowiredprivate 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);}
}
測試一樣也是全部通過:
java調用dubbo接口?本文通過實例講解了如何整合Springboot
和MongoDB
,主要有兩種方法:MongoRepository
和MongoTemplate
。代碼基本在文章中已經貼出來了,如果還不清楚,可以在南瓜慢說公眾號回復<SpringbootMongoDB>獲取代碼。
歡迎訪問南瓜慢說 www.pkslow.com 獲取更多精彩文章!
歡迎關注微信公眾號<南瓜慢說>,將持續為你更新...
dubbo調用流程、多讀書,多分享;多寫作,多整理。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态