Spring Boot集成MongoDB

简介: 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



相关文章
|
5月前
|
数据可视化 Java BI
将 Spring 微服务与 BI 工具集成:最佳实践
本文探讨了 Spring 微服务与商业智能(BI)工具集成的潜力与实践。随着微服务架构和数据分析需求的增长,Spring Boot 和 Spring Cloud 提供了构建可扩展、弹性服务的框架,而 BI 工具则增强了数据可视化与实时分析能力。文章介绍了 Spring 微服务的核心概念、BI 工具在企业中的作用,并深入分析了两者集成带来的优势,如实时数据处理、个性化报告、数据聚合与安全保障。同时,文中还总结了集成过程中的最佳实践,包括事件驱动架构、集中配置管理、数据安全控制、模块化设计与持续优化策略,旨在帮助企业构建高效、智能的数据驱动系统。
310 1
将 Spring 微服务与 BI 工具集成:最佳实践
|
7月前
|
XML 人工智能 Java
Spring Boot集成Aviator实现参数校验
Aviator是一个高性能、轻量级的Java表达式求值引擎,适用于动态表达式计算。其特点包括支持多种运算符、函数调用、正则匹配、自动类型转换及嵌套变量访问,性能优异且依赖小。适用于规则引擎、公式计算和动态脚本控制等场景。本文介绍了如何结合Aviator与AOP实现参数校验,并附有代码示例和仓库链接。
477 0
|
7月前
|
安全 Java 数据库
第16课:Spring Boot中集成 Shiro
第16课:Spring Boot中集成 Shiro
916 0
|
7月前
|
消息中间件 存储 Java
第15课: Spring Boot中集成ActiveMQ
第15课: Spring Boot中集成ActiveMQ
567 0
|
8月前
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
937 0
|
11月前
|
安全 Java Apache
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 身份和权限认证
本文介绍了 Apache Shiro 的身份认证与权限认证机制。在身份认证部分,分析了 Shiro 的认证流程,包括应用程序调用 `Subject.login(token)` 方法、SecurityManager 接管认证以及通过 Realm 进行具体的安全验证。权限认证部分阐述了权限(permission)、角色(role)和用户(user)三者的关系,其中用户可拥有多个角色,角色则对应不同的权限组合,例如普通用户仅能查看或添加信息,而管理员可执行所有操作。
565 0
|
11月前
|
安全 Java 数据安全/隐私保护
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 三大核心组件
本课程介绍如何在Spring Boot中集成Shiro框架,主要讲解Shiro的认证与授权功能。Shiro是一个简单易用的Java安全框架,用于认证、授权、加密和会话管理等。其核心组件包括Subject(认证主体)、SecurityManager(安全管理员)和Realm(域)。Subject负责身份认证,包含Principals(身份)和Credentials(凭证);SecurityManager是架构核心,协调内部组件运作;Realm则是连接Shiro与应用数据的桥梁,用于访问用户账户及权限信息。通过学习,您将掌握Shiro的基本原理及其在项目中的应用。
406 0
|
11月前
|
NoSQL Java 关系型数据库
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Redis 介绍
本文介绍在 Spring Boot 中集成 Redis 的方法。Redis 是一种支持多种数据结构的非关系型数据库(NoSQL),具备高并发、高性能和灵活扩展的特点,适用于缓存、实时数据分析等场景。其数据以键值对形式存储,支持字符串、哈希、列表、集合等类型。通过将 Redis 与 Mysql 集群结合使用,可实现数据同步,提升系统稳定性。例如,在网站架构中优先从 Redis 获取数据,故障时回退至 Mysql,确保服务不中断。
410 0
微服务——SpringBoot使用归纳——Spring Boot 中集成Redis——Redis 介绍
|
5月前
|
监控 Cloud Native Java
Spring Integration 企业集成模式技术详解与实践指南
本文档全面介绍 Spring Integration 框架的核心概念、架构设计和实际应用。作为 Spring 生态系统中的企业集成解决方案,Spring Integration 基于著名的 Enterprise Integration Patterns(EIP)提供了轻量级的消息驱动架构。本文将深入探讨其消息通道、端点、过滤器、转换器等核心组件,以及如何构建可靠的企业集成解决方案。
565 0

推荐镜像

更多