Spring Boot中MongoDB的使用和实战

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: Spring Boot中MongoDB的使用和实战

创作不易 觉得有帮助请点赞关注收藏~~~

MongoDB是一个基于分布式文件存储的NoSQL数据库,由C++语言编写,旨在为Web应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库中功能最丰富最像关系数据库的,它支持的数据结构非常松散,是类似JSON的BSON格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似与 面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

一:安装MongoDB

官方网站https://www.mongodb.com/downlad-center/community下载

二:Spring Boot整合MongoDB

Spring对MongoDB的支持主要是通过Spring Data MongoDB实现的,Spring Data MongoDB提供了如下功能

1:对象/文档映射注解

2:MongoTemplate

提供了数据访问的方法

3:Repository

public interface PersonRepository extends MongoRepository<Person,String>{
}

实战进行增删改查

1:创建基于spring-boot-starter-data-mongodb依赖的Spring Boot应用

2:配置application.properties文件

server.servlet.context-path=/ch6_8
#让控制器输出的JSON字符串格式更美观
spring.jackson.serialization.indent-output=true

3:创建领域模型

创建名为com.ch.ch6_8.domain的包 并在该包中创建领域模型Person以及人去过的Loation

Person代码如下

package com.ch.ch6_8.domain;
import java.util.ArrayList;
import java.util.List;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
@Document
public class Person {
  @Id
  private String pid;
  private String pname;
  private Integer page;
  private String psex;
  @Field("plocs")
  private List<Location> locations = new ArrayList<Location>();
  public Person() {
    super();
  }
  public Person(String pname, Integer page, String psex) {
    super();
    this.pname = pname;
    this.page = page;
    this.psex = psex;
  }
  public String getPid() {
    return pid;
  }
  public void setPid(String pid) {
    this.pid = pid;
  }
  public String getPname() {
    return pname;
  }
  public void setPname(String pname) {
    this.pname = pname;
  }
  public Integer getPage() {
    return page;
  }
  public void setPage(Integer page) {
    this.page = page;
  }
  public String getPsex() {
    return psex;
  }
  public void setPsex(String psex) {
    this.psex = psex;
  }
  public List<Location> getLocations() {
    return locations;
  }
  public void setLocations(List<Location> locations) {
    this.locations = locations;
  }
}

Location代码如下

package com.ch.ch6_8.domain;
public class Location {
  private String locName;
  private String year;
  public Location() {
    super();
  }
  public Location(String locName, String year) {
    super();
    this.locName = locName;
    this.year = year;
  }
  public String getLocName() {
    return locName;
  }
  public void setLocName(String locName) {
    this.locName = locName;
  }
  public String getYear() {
    return year;
  }
  public void setYear(String year) {
    this.year = year;
  }
}

4:创建数据访问接口

package com.ch.ch6_8.repository;
import java.util.List;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import com.ch.ch6_8.domain.Person;
public interface PersonRepository extends MongoRepository<Person, String>{
  Person findByPname(String pname);//支持方法名查询,方法名命名规范参照表6.1
  @Query("{'psex':?0}")//JSON字符串
  List<Person> selectPersonsByPsex(String psex);
}

5:创建控制器层

创建控制器类TestMongoDBController

package com.ch.ch6_8.controller;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ch.ch6_8.domain.Location;
import com.ch.ch6_8.domain.Person;
import com.ch.ch6_8.repository.PersonRepository;
@RestController
public class TestMongoDBController {
  @Autowired
  private PersonRepository personRepository;
  @RequestMapping("/save")
  public List<Person> save() {
    List<Location> locations1 = new ArrayList<Location>();
    Location loc1 = new Location("北京","2019");
    Location loc2 = new Location("上海","2018");
    locations1.add(loc1);
    locations1.add(loc2);
    List<Location> locations2 = new ArrayList<Location>();
    Location loc3 = new Location("广州","2017");
    Location loc4 = new Location("深圳","2016");
    locations2.add(loc3);
    locations2.add(loc4);
    List<Person> persons = new ArrayList<Person>();
    Person p1 = new Person("陈恒1", 88, "男");
    p1.setLocations(locations1);
    Person p2 = new Person("陈恒2", 99, "女");
    p2.setLocations(locations2);
    persons.add(p1);
    persons.add(p2);
    return personRepository.saveAll(persons);
  }
  @RequestMapping("/findByPname")
  public Person findByPname(String pname) {
    return personRepository.findByPname(pname);
  }
  @RequestMapping("/selectPersonsByPsex")
  public List<Person> selectPersonsByPsex(String psex) {
    return personRepository.selectPersonsByPsex(psex);
  }
  @RequestMapping("/updatePerson")
  public Person updatePerson(String oldPname, String newPname) {
    Person p1 = personRepository.findByPname(oldPname);
    if(p1 != null)
      p1.setPname(newPname);
    return personRepository.save(p1);
  }
  @RequestMapping("/deletePerson")
  public void updatePerson(String pname) {
    Person p1 = personRepository.findByPname(pname);
    personRepository.delete(p1);
  }
}

运行主类后 可以使用MongoDB的图形界面管理工具MongoDB Compass打开查看已保存的数据

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
1月前
|
XML Java 数据库连接
spring boot 参数的过滤注解与实战
在Spring Boot应用中,对于入参的过滤,通常会涉及到对Web层的数据验证和处理。Spring Boot借助Spring框架提供了强大的验证框架支持,主要基于JSR-303/JSR-380(Bean Validation API)规范,以及Spring自身的@Valid或@Validated注解来实现请求参数的验证。以下是一些常见的使用案例来展示如何对参数进行过滤和验证。
29 1
|
2月前
|
Dubbo Java 应用服务中间件
实战指南:如何在Spring Boot中无缝整合Dubbo【四】
实战指南:如何在Spring Boot中无缝整合Dubbo【四】
46 0
|
1月前
|
人工智能 JSON 前端开发
【Spring boot实战】Springboot+对话ai模型整体框架+高并发线程机制处理优化+提示词工程效果展示(按照框架自己修改可对接市面上百分之99的模型)
【Spring boot实战】Springboot+对话ai模型整体框架+高并发线程机制处理优化+提示词工程效果展示(按照框架自己修改可对接市面上百分之99的模型)
|
2月前
|
消息中间件 存储 监控
搭建消息时光机:深入探究RabbitMQ_recent_history_exchange在Spring Boot中的应用【RabbitMQ实战 二】
搭建消息时光机:深入探究RabbitMQ_recent_history_exchange在Spring Boot中的应用【RabbitMQ实战 二】
34 1
|
2月前
|
消息中间件 安全 druid
GitHub昙花一现!《Spring Boot趣味实战课》神作开源几分钟被下架
今天给大家分享好书了:刘水镜老师的 《Spring Boot趣味实战课》,网上依旧是没有开源版本!小编会在文末附电子版免费下载方式。 刘水镜是谁? 十余年持续技术文章输出,CSDN博客专家。2020年《 Spring Boot趣味私房课》专栏上线,凭借风趣幽默、深入浅出的写作风格深受读者好评。 《Spring Boot趣味实战课》 内容丰富、趣味实战是本书的两大特色 涵盖 Spring MVC、MyBatis Plus、Spring DaJPA、Spring Security、Quartz等主流框架 整合MySQL. Druid、Redis、 RabbitMQ、Elastics
40 0
|
29天前
|
安全 Java 数据安全/隐私保护
【深入浅出Spring原理及实战】「EL表达式开发系列」深入解析SpringEL表达式理论详解与实际应用
【深入浅出Spring原理及实战】「EL表达式开发系列」深入解析SpringEL表达式理论详解与实际应用
66 1
|
2月前
|
设计模式 前端开发 Java
玩转Spring—Spring5新特性之Reactive响应式编程实战
玩转Spring—Spring5新特性之Reactive响应式编程实战
60 0
|
2月前
|
消息中间件 NoSQL Java
Redis Streams在Spring Boot中的应用:构建可靠的消息队列解决方案【redis实战 二】
Redis Streams在Spring Boot中的应用:构建可靠的消息队列解决方案【redis实战 二】
231 1
|
29天前
|
存储 XML 缓存
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南(一)
【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南
67 0
|
2月前
|
监控 IDE Java
Java项目调试实战:如何高效调试Spring Boot项目中的GET请求,并通过equalsIgnoreCase()解决大小写不一致问题
Java项目调试实战:如何高效调试Spring Boot项目中的GET请求,并通过equalsIgnoreCase()解决大小写不一致问题
45 0