Springboot整合MongoDB进行CRUD操作的两种方式(实例代码详解)

网友投稿 350 2022-12-09


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中即可:

org.springframework.boot

spring-boot-starter-data-mongodb

org.springframework.boot

spring-boot-starter-web

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 StFIDLNering 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 {

}

注意MongoRepository后面接的泛型第一个为实体类,第二个为主键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 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 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.springframeworhttp://k.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 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 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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java8 Lamda方法引用和构造引用原理
下一篇:Spring装配bean方法实例总结
相关文章

 发表评论

暂时没有评论,来抢沙发吧~