专栏首页用户5521492的专栏SpringBoot 实战 (十八) | 整合 MongoDB

SpringBoot 实战 (十八) | 整合 MongoDB

前言

如题,今天介绍下 SpringBoot 是如何整合 MongoDB 的。

MongoDB 简介

MongoDB 是由 C++ 编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,它将数据存储为一个文档,数据结构由键值 (key=>value) 对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组,非常灵活。存储结构如下:

{
    "studentId": "201311611405",
    "age":24,
    "gender":"男",
    "name":"一个优秀的废人"
}

准备工作

  • SpringBoot 2.1.3 RELEASE
  • MongnDB 2.1.3 RELEASE
  • MongoDB 4.0
  • IDEA
  • JDK8
  • 创建一个名为 test 的数据库,不会建的。参考菜鸟教程: http://www.runoob.com/mongodb/mongodb-tutorial.html

配置数据源

spring:
  data:
    mongodb:
      uri: mongodb://localhost:27017/test

以上是无密码写法,如果 MongoDB 设置了密码应这样设置:

spring:
  data:
    mongodb:
      uri: mongodb://name:password@localhost:27017/test

pom 依赖配置

<!-- mongodb 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<!-- web 依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- lombok 依赖 -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<!-- test 依赖(没用到) -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

实体类

@Data
public class Student {

    @Id
    private String id;

    @NotNull
    private String studentId;

    private Integer age;

    private String name;

    private String gender;

}

dao 层

和 JPA 一样,SpringBoot 同样为开发者准备了一套 Repository ,只需要继承 MongoRepository 传入实体类型以及主键类型即可。

@Repository
public interface StudentRepository extends MongoRepository<Student, String> {
}

service 层

public interface StudentService {

    Student addStudent(Student student);

    void deleteStudent(String id);

    Student updateStudent(Student student);

    Student findStudentById(String id);

    List<Student> findAllStudent();

}

实现类:

@Service
public class StudentServiceImpl implements StudentService {

    @Autowired
    private StudentRepository studentRepository;

    /**
     * 添加学生信息
     * @param student
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Student addStudent(Student student) {
        return studentRepository.save(student);
    }

    /**
     * 根据 id 删除学生信息
     * @param id
     */
    @Override
    public void deleteStudent(String id) {
        studentRepository.deleteById(id);
    }

    /**
     * 更新学生信息
     * @param student
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Student updateStudent(Student student) {
        Student oldStudent = this.findStudentById(student.getId());
        if (oldStudent != null){
            oldStudent.setStudentId(student.getStudentId());
            oldStudent.setAge(student.getAge());
            oldStudent.setName(student.getName());
            oldStudent.setGender(student.getGender());
            return studentRepository.save(oldStudent);
        } else {
            return null;
        }
    }

    /**
     * 根据 id 查询学生信息
     * @param id
     * @return
     */
    @Override
    public Student findStudentById(String id) {
        return studentRepository.findById(id).get();
    }

    /**
     * 查询学生信息列表
     * @return
     */
    @Override
    public List<Student> findAllStudent() {
        return studentRepository.findAll();
    }
}

controller 层

@RestController
@RequestMapping("/student")
public class StudentController {

    @Autowired
    private StudentService studentService;

    @PostMapping("/add")
    public Student addStudent(@RequestBody Student student){
        return studentService.addStudent(student);
    }

    @PutMapping("/update")
    public Student updateStudent(@RequestBody Student student){
        return studentService.updateStudent(student);
    }

    @GetMapping("/{id}")
    public Student findStudentById(@PathVariable("id") String id){
        return studentService.findStudentById(id);
    }

    @DeleteMapping("/{id}")
    public void deleteStudentById(@PathVariable("id") String id){
        studentService.deleteStudent(id);
    }

    @GetMapping("/list")
    public List<Student> findAllStudent(){
        return studentService.findAllStudent();
    }

}

测试结果

MongoDB 增删改查

Postman 测试已经全部通过,这里仅展示了保存操作。

数据库结果

完整代码

https://github.com/turoDog/Demo/tree/master/springboot_mongodb_demo

本文分享自微信公众号 - 一个优秀的废人(feiren_java),作者:nasus

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringBoot 实战 (十一) | 整合数据缓存 Cache

    如题,今天介绍 SpringBoot 的数据缓存。做过开发的都知道程序的瓶颈在于数据库,我们也知道内存的速度是大大快于硬盘的,当需要重复获取相同数据时,一次又一...

    一个优秀的废人
  • SpringBoot 实战 (十三) | 整合 MyBatis (XML 版)

    如题,今天介绍 SpringBoot 与 Mybatis 的整合以及 Mybatis 的使用,之前介绍过了 SpringBoot 整合MyBatis 注解版的使...

    一个优秀的废人
  • SpringBoot 实战 (九) | 整合 Mybatis

    如题,今天介绍 SpringBoot 与 Mybatis 的整合以及 Mybatis 的使用,本文通过注解的形式实现。

    一个优秀的废人
  • 获取jqGrid中选择的行的数据

    var id=$(‘#gridTable’).jqGrid(‘getGridParam’,'selrow’);

    ydymz
  • OnKeyPress事件和Javascript检测键盘输入

    对于有些时候,我们需要检测用户键盘输入的键盘信息,来处理一些相应的事件。 这里田子建议使用OnKeyPress=“”事件来处理。相类似的还有OnKeyUp和On...

    Java中文社群_老王
  • 为什么要做网站地图?

    网站地图,又称站点地图,它便是一个页面,上面放置了网站上一切页面的链接。大多数人在网站上找不到自己所需求的信息时,可能会将网站地图作为一种补救措施。搜索引擎蜘蛛...

    申霖
  • SAP CRM One Order OB,OW和DB buffer的调用关系图

    版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.bl...

    Jerry Wang
  • Redis5新特性Streams作消息队列

    本文所使用 Redis 版本为 5.0.5 。如果使用更早的 5.x 版本,有些 API 使用效果,与本文中描述略有不同。

    ytao
  • mongodb取得数组元素中的匹配项目。

    汗了,本来想把这个语句翻译成php,但是搞来搞出都是选出所有数组。无解了。 后来baidu到一个projection得childboard.$:1..居然可以...

    xiny120
  • mysql基本操作命令汇总

    作用:提高表中数据的查询速度 1.普通索引 2.唯一性索引 3.全文索引 4.单列索引 5.多列索引 6.空间索引

    崔笑颜

扫码关注云+社区

领取腾讯云代金券