Spring Boot集成MongoDB

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云数据库 MongoDB,通用型 2核4GB
简介: 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数据库的安装、配置、服务的启动、数据的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
目录
相关文章
|
7天前
|
数据可视化 Java API
Spring Boot与Swagger的集成
Spring Boot与Swagger的集成
|
7天前
|
Java API 开发者
在Spring Boot中集成Swagger API文档
在Spring Boot中集成Swagger API文档
|
6天前
|
Java API 开发工具
Spring Boot与Spring Cloud Config的集成
Spring Boot与Spring Cloud Config的集成
|
7天前
|
Java 微服务 Spring
|
6天前
|
监控 Java Docker
Spring Boot与Traefik的集成
Spring Boot与Traefik的集成
|
6天前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka Streams的集成
Spring Boot与Apache Kafka Streams的集成
|
6天前
|
存储 NoSQL Java
使用Spring Boot和MongoDB构建NoSQL应用
使用Spring Boot和MongoDB构建NoSQL应用
|
6天前
|
消息中间件 Java 数据安全/隐私保护
Spring Boot与RabbitMQ的集成
Spring Boot与RabbitMQ的集成
|
7天前
|
存储 安全 Java
在Spring Boot中集成OAuth2
在Spring Boot中集成OAuth2
|
7天前
|
负载均衡 Java 网络架构
Spring Boot与Netflix Eureka的集成
Spring Boot与Netflix Eureka的集成