springboot mongodb整合_实例讲解Springboot整合MongoDB进行CRUD操作的两种方式

1 简介

Springboot是最简单的使用Spring的方式,而MongoDB是最流行的NoSQL数据库。两者在分布式、微服务架构中使用率极高,本文将用实例介绍如何在Springboot中整合MongoDB的两种方法:MongoRepository和MongoTemplate。

代码结构如下:

a51fc790c0bb244ef05be98c31f227a9.png

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=8080spring.data.mongodb.authentication-database=adminspring.data.mongodb.database=testdbspring.data.mongodb.username=userspring.data.mongodb.password=123456spring.data.mongodb.host=localhostspring.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;@Repositorypublic 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测试后,每个接口均调用成功。就不一一截图了。

10236b7e59c2fba3a53cbc8fe4b0a815.png

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.springframework.data.mongodb.core.query.Query;import org.springframework.stereotype.Repository;import java.util.List;@Repositorypublic 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 测试

测试一样也是全部通过:

5dc76ff6c4a0fb42c7e2ec6366e23742.png

5 总结

本文通过实例讲解了如何整合Springboot和MongoDB,主要有两种方法:MongoRepository和MongoTemplate。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值