Spring Boot集成MongoDB

来源:互联网 发布:八种调度算法 编辑:程序博客网 时间:2024/06/05 17:42

  • MongoDB回顾

  1. MongoDB是一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库之间的产品
  2. 其主要目标是在键/值存储方式(提供了高性能和高度伸缩性)和传统的RDBMS系统(具有丰富的功能)之间架起一座桥梁,
  3. 它集两者的优势于一身。
  4. MongoDB支持的数据结构非常松散,是类似jsonbson格式,因此可以存储比较复杂的数据类型,
  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/17 8:06
  10. */
  11. public class UserMongoDo {
  12. //id属性是给mongodb用的,用@Id注解修饰
  13. @Id
  14. private String id;
  15. private String name;
  16. private int age;
  17. public String getId() {
  18. return id;
  19. }
  20. public void setId(String id) {
  21. this.id = id;
  22. }
  23. public String getName() {
  24. return name;
  25. }
  26. public void setName(String name) {
  27. this.name = name;
  28. }
  29. public int getAge() {
  30. return age;
  31. }
  32. public void setAge(int age) {
  33. this.age = age;
  34. }
  35. @Override
  36. public boolean equals(Object o) {
  37. if (this == o) {
  38. return true;
  39. }
  40. if (o == null || getClass() != o.getClass()) {
  41. return false;
  42. }
  43. UserMongoDo that = (UserMongoDo) o;
  44. if (age != that.age) {
  45. return false;
  46. }
  47. if (id != null ? !id.equals(that.id) : that.id != null) {
  48. return false;
  49. }
  50. return name != null ? name.equals(that.name) : that.name == null;
  51. }
  52. @Override
  53. public int hashCode() {
  54. int result = 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/17 8:09
    12. */
    13. public interface UserMongoRepository extends MongoRepository<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/17 8:21
  21. */
  22. @Api(value = "MONGO服务", description = "基本的MONGO增删改查API")
  23. @RestController
  24. @RequestMapping(value = "/mongo")
  25. public class UserMongoController {
  26. private final Logger logger = 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. UserMongoDo userMongoDo = new UserMongoDo();
  35. userMongoDo.setName("张三");
  36. userMongoDo.setAge(20);
  37. userMongoRepository.save(userMongoDo);
  38. logger.info("根据UserMongoDo对象创建用户:{}", userMongoDo);
  39. userMongoDo = new UserMongoDo();
  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. }

  • 效果图


 
参考来源: http://412887952-qq-com.iteye.com/blog/2318852
参考来源:http://www.jianshu.com/p/879caef9b0bc
原创粉丝点击