Spring Boot集成MongoDB

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: Spring Boot集成MongoDB

  • MongoDB回顾

  1. MongoDB是一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库之间的产品,
  2. 其主要目标是在键/值存储方式(提供了高性能和高度伸缩性)和传统的RDBMS系统(具有丰富的功能)之间架起一座桥梁,
  3. 它集两者的优势于一身。
  4. MongoDB支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型,
  5. 也因为他的存储格式也使得它所存储的数据在Nodejs程序应用中使用非常流畅。
  6. 既然称为NoSQL数据库,Mongo的查询语言非常强大,其语法有点类似于面向对象的查询语言,
  7. 几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
  8. 但是,MongoDB也不是万能的,同MySQL等关系型数据库相比,它们在针对不同的数据类型和事务要求上都存在自己独特的优势。
  9. 在数据存储的选择中,坚持多样化原则,选择更好更经济的方式,而不是自上而下的统一化。
  10. 较常见的,我们可以直接用MongoDB来存储键值对类型的数据,如:验证码、Session等;由于MongoDB的横向扩展能力,
  11. 也可以用来存储数据规模会在未来变的非常巨大的数据,如:日志、评论等;
  12. 由于MongoDB存储数据的弱类型,也可以用来存储一些多变json数据,如:与外系统交互时经常变化的JSON报文。
  13. 而对于一些对数据有复杂的高事务性要求的操作,如:账户交易等就不适合使用MongoDB来存储


  • 引入MongoDB依赖



  1. <dependency>
  2.    <groupId>org.springframework.boot</groupId>
  3.    <artifactId>spring-boot-starter-data-mongodb</artifactId>
  4. </dependency>

  • MongoDB的配置【application.properties】
  1. # MONGODB (MongoProperties)
  2. # Mongo database URI. When set, host and port are ignored.
  3. #spring.data.mongodb.uri=mongodb://root:root@localhost:27017/mongotest
  4. # Mongo server host.
  5. spring.data.mongodb.host=localhost
  6. # Mongo server port.
  7. spring.data.mongodb.port=27017
  8. # Login user of the mongo server.
  9. spring.data.mongodb.username=root
  10. # Login password of the mongo server.
  11. spring.data.mongodb.password=root
  12. # Authentication database name.
  13. spring.data.mongodb.authentication-database=mongotest
  14. # Database name
  15. spring.data.mongodb.database=mongotest
  16. # Fully qualified name of the FieldNamingStrategy to use.
  17. #spring.data.mongodb.field-naming-strategy=
  18. # GridFS database name.
  19. #spring.data.mongodb.grid-fs-database=
  20. # Enable Mongo repositories.
  21. spring.data.mongodb.repositories.enabled=true
  22. # Mongo database URI. When set, host and port are ignored.
  23. #spring.data.mongodb.uri=mongodb://localhost/test


  • MongoDB的POJO


  1. package com.newcapec.dao.domain;
  2. import org.springframework.data.annotation.Id;
  3. /**
  4. * @version V1.0
  5. * @Title: Mongo实体
  6. * @ClassName: com.newcapec.dao.domain
  7. * @Description:
  8. * @author: FLY
  9. * @date:2017/10/178:06
  10. */
  11. publicclassUserMongoDo {
  12.    //id属性是给mongodb用的,用@Id注解修饰
  13.    @Id
  14.    private String id;
  15.    private String name;
  16.    privateint age;
  17.    public String getId() {
  18.        return id;
  19.    }
  20.    publicvoidsetId(String id) {
  21.        this.id = id;
  22.    }
  23.    public String getName() {
  24.        return name;
  25.    }
  26.    publicvoidsetName(String name) {
  27.        this.name = name;
  28.    }
  29.    publicintgetAge() {
  30.        return age;
  31.    }
  32.    publicvoidsetAge(int age) {
  33.        this.age = age;
  34.    }
  35.    @Override
  36.    publicbooleanequals(Object o) {
  37.        if (this == o) {
  38.            returntrue;
  39.        }
  40.        if (o == null || getClass() != o.getClass()) {
  41.            returnfalse;
  42.        }
  43.        UserMongoDothat= (UserMongoDo) o;
  44.        if (age != that.age) {
  45.            returnfalse;
  46.        }
  47.        if (id != null ? !id.equals(that.id) : that.id != null) {
  48.            returnfalse;
  49.        }
  50.        return name != null ? name.equals(that.name) : that.name == null;
  51.    }
  52.    @Override
  53.    publicinthashCode() {
  54.        intresult= id != null ? id.hashCode() : 0;
  55.        result = 31 * result + (name != null ? name.hashCode() : 0);
  56.        result = 31 * result + age;
  57.        return result;
  58.    }
  59.    @Override
  60.    public String toString() {
  61.        return"UserMongoDo{" +
  62.                "id='" + id + '\'' +
  63.                ", name='" + name + '\'' +
  64.                ", age=" + age +
  65.                '}';
  66.    }
  67. }



  • MongoDB的DAO层【需要继承MongoRepository接口



  1. package com.newcapec.dao.repository.mongo;
  2. import com.newcapec.dao.domain.UserMongoDo;
  3. import org.springframework.data.mongodb.repository.MongoRepository;
  4. /**
  5. * @version V1.0
  6. * @Title: Mongo--DAO层的接口
  7. * @ClassName: com.newcapec.dao.repository.mongo
  8. * @Description: 继承自MongoRepository接口,MongoRepository接口包含了常用的CRUD操作,
  9. * 例如:save、insert、findall等等。我们可以定义自己的查找接口,
  10. * @author: FLY
  11. * @date:2017/10/178:09
  12. */
  13. publicinterfaceUserMongoRepositoryextendsMongoRepository<UserMongoDo,String> {
  14.    UserMongoDo findByName(String name);
  15. }


  • MongoDB的Controller层



  1. package com.newcapec.controller.mongo;
  2. import com.newcapec.dao.domain.UserMongoDo;
  3. import com.newcapec.dao.repository.mongo.UserMongoRepository;
  4. import io.swagger.annotations.Api;
  5. import io.swagger.annotations.ApiOperation;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.data.mongodb.core.MongoTemplate;
  10. import org.springframework.web.bind.annotation.RequestMapping;
  11. import org.springframework.web.bind.annotation.RequestMethod;
  12. import org.springframework.web.bind.annotation.RestController;
  13. import java.util.List;
  14. /**
  15. * @version V1.0
  16. * @Title:
  17. * @ClassName: com.newcapec.controller.mongo
  18. * @Description:
  19. * @author: FLY
  20. * @date:2017/10/178:21
  21. */
  22. @Api(value = "MONGO服务", description = "基本的MONGO增删改查API")
  23. @RestController
  24. @RequestMapping(value = "/mongo")
  25. publicclassUserMongoController {
  26.    privatefinalLoggerlogger= LoggerFactory.getLogger(this.getClass());
  27.    @Autowired
  28.    private UserMongoRepository userMongoRepository;
  29.    @Autowired
  30.    private MongoTemplate mongoTemplate;
  31.    @ApiOperation(value = "新建用户", notes = "根据UserMongoDo对象创建用户")
  32.    @RequestMapping(value = "save",method = RequestMethod.POST)
  33.    public String save(){
  34.        UserMongoDouserMongoDo=newUserMongoDo();
  35.        userMongoDo.setName("张三");
  36.        userMongoDo.setAge(20);
  37.        userMongoRepository.save(userMongoDo);
  38.        logger.info("根据UserMongoDo对象创建用户:{}", userMongoDo);
  39.        userMongoDo = newUserMongoDo();
  40.        userMongoDo.setName("李四");
  41.        userMongoDo.setAge(30);
  42.        userMongoRepository.save(userMongoDo);
  43.        logger.info("根据UserMongoDo对象创建用户:{}", userMongoDo);
  44.        return"ok";
  45.    }
  46.    @ApiOperation(value = "查询所有UserMongoDo对象", notes = "查询所有UserMongoDo对象")
  47.    @RequestMapping(value = "findAll", method = RequestMethod.GET)
  48.    public List<UserMongoDo> find(){
  49.        List<UserMongoDo> userMongoDoList = userMongoRepository.findAll();
  50.        logger.info("查询所有UserMongoDo对象:{}", userMongoDoList);
  51.        return userMongoDoList;
  52.    }
  53.    @ApiOperation(value = "根据姓名查询UserMongoDo对象", notes = "根据姓名查询UserMongoDo对象")
  54.    @RequestMapping(value = "findByName", method = RequestMethod.GET)
  55.    public UserMongoDo findByName(){
  56.        return userMongoRepository.findByName("张三");
  57.    }
  58.    @RequestMapping("findAllByTemplate")
  59.    public List<UserMongoDo> findAllByTemplate(){
  60.        return mongoTemplate.findAll(UserMongoDo.class);
  61.    }
  62. }



  • 效果图


图片.png

 

参考来源: http://412887952-qq-com.iteye.com/blog/2318852

参考来源:http://www.jianshu.com/p/879caef9b0bc



相关实践学习
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
目录
相关文章
|
4月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
Spring Cloud Alibaba 发布了 Scheduling 任务调度模块 [#3732]提供了一套开源、轻量级、高可用的定时任务解决方案,帮助您快速开发微服务体系下的分布式定时任务。
14933 30
|
3月前
|
人工智能 Java API
JeecgBoot 低代码平台快速集成 Spring AI
Spring 通过 Spring AI 项目正式启用了 AI(人工智能)生成提示功能。本文将带你了解如何在 Jeecg Boot 应用中集成生成式 AI,以及 Spring AI 如何与模型互动,包含 RAG 功能。
123 3
|
4月前
|
JSON 缓存 Java
Spring Boot集成 Swagger2 展现在线接口文档
本节课详细分析了 Swagger 的优点,以及 Spring Boot 如何集成 Swagger2,包括配置,相关注解的讲解,涉及到了实体类和接口类,以及如何使用。最后通过页面测试,体验了 Swagger 的强大之处,基本上是每个项目组中必备的工具之一,所以要掌握该工具的使用,也不难。
|
3月前
|
Java Spring
【Azure 事件中心】Spring Boot 集成 Event Hub(azure-spring-cloud-stream-binder-eventhubs)指定Partition Key有异常消息
【Azure 事件中心】Spring Boot 集成 Event Hub(azure-spring-cloud-stream-binder-eventhubs)指定Partition Key有异常消息
|
4月前
|
NoSQL Java API
Spring Data MongoDB 使用
Spring Data MongoDB 使用
231 1
|
4月前
|
SQL Java 数据库
实时计算 Flink版产品使用问题之Spring Boot集成Flink可以通过什么方式实现通过接口启动和关闭Flink程序
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4月前
|
Java API 开发工具
Spring Boot与Spring Cloud Config的集成
Spring Boot与Spring Cloud Config的集成
|
3月前
|
NoSQL Java 关系型数据库
MongoDB保姆级指南(下):无缝集成SpringData框架,一篇最全面的Java接入指南!
前面的两篇文章已经将MongoDB大多数知识进行了阐述,不过其中的所有内容,都基于原生的MongoDB语法在操作。可是,在实际的日常开发过程中,我们并不会直接去接触MongoDB,毕竟MongoDB只能算作是系统内的一个组件,无法仅依靠它来搭建出一整套系统。
124 0
|
4月前
|
监控 Java Docker
Spring Boot与Traefik的集成
Spring Boot与Traefik的集成
|
6月前
|
XML 安全 Java
深入实践springboot实战 蓄势待发 我不是雷锋 我是知识搬运工
springboot,说白了就是一个集合了功能的大类库,包括springMVC,spring,spring data,spring security等等,并且提供了很多和可以和其他常用框架,插件完美整合的接口(只能说是一些常用框架,基本在github上能排上名次的都有完美整合,但如果是自己写的一个框架就无法实现快速整合)。