当前位置:   article > 正文

Spring Boot学习(八)之使用NoSQL数据库(二):MongDb_spring boot 创建的mongdb数据库在nosqlbooster中没有显示

spring boot 创建的mongdb数据库在nosqlbooster中没有显示
上篇文章分享了关于 Spring Boot中使用Redis 的文章,除了Redis之后,我们在互联网产品中还经常会用到另外一款著名的NoSQL数据库MongoDB。
至于MongoDB安装请查看我的其他博客哟!
下面就来简单介绍一下MongoDB,并且通过一个例子来介绍Spring Boot中对MongoDB访问的配置和使用。
MongoDB简介
MongoDB是一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库之间的产品,其主要目标是在键/值存储方式(提供了高性能和高度伸缩性)和传统的RDBMS系统(具有丰富的功能)之间架起一座桥梁,它集两者的优势于一身。
MongoDB支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型,也因为他的存储格式也使得它所存储的数据在Nodejs程序应用中使用非常流畅。
既然称为NoSQL数据库,Mongo的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
但是,MongoDB也不是万能的,同MySQL等关系型数据库相比,它们在针对不同的数据类型和事务要求上都存在自己独特的优势。在数据存储的选择中,坚持多样化原则,选择更好更经济的方式,而不是自上而下的统一化。
较常见的,我们可以直接用MongoDB来存储键值对类型的数据,如:验证码、Session等;由于MongoDB的横向扩展能力,也可以用来存储数据规模会在未来变的非常巨大的数据,如:日志、评论等;由于MongoDB存储数据的弱类型,也可以用来存储一些多变json数据,如:与外系统交互时经常变化的JSON报文。而对于一些对数据有复杂的高事务性要求的操作,如:账户交易等就不适合使用MongoDB来存储。
访问MongoDB
在Spring Boot中,对如此受欢迎的MongoDB,同样提供了自配置功能。
引入依赖

Spring Boot中可以通过在pom.xml中加入spring-boot-starter-data-mongodb引入对mongodb的访问支持依赖。它的实现依赖spring-data-mongodb。是的,您没有看错,又是spring-data的子项目,之前介绍过spring-data-jpa、spring-data-redis,对于mongodb的访问,spring-data也提供了强大的支持,下面就开始动手试试吧。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.xiaojingg</groupId>
  6. <artifactId>springbootstudy-demo8-mongdb</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <packaging>jar</packaging>
  9. <name>springbootstudy-demo8-mongdb</name>
  10. <description>Demo project for Spring Boot</description>
  11. <parent>
  12. <groupId>org.springframework.boot</groupId>
  13. <artifactId>spring-boot-starter-parent</artifactId>
  14. <version>1.5.8.RELEASE</version>
  15. <relativePath/> <!-- lookup parent from repository -->
  16. </parent>
  17. <properties>
  18. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  19. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  20. <java.version>1.8</java.version>
  21. </properties>
  22. <dependencies>
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter</artifactId>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.springframework.boot</groupId>
  29. <artifactId>spring-boot-starter-test</artifactId>
  30. <scope>test</scope>
  31. </dependency>
  32. <dependency>
  33. <groupId>org.springframework.boot</groupId>
  34. <artifactId>spring-boot-starter-data-mongodb</artifactId>
  35. </dependency>
  36. </dependencies>
  37. <build>
  38. <plugins>
  39. <plugin>
  40. <groupId>org.springframework.boot</groupId>
  41. <artifactId>spring-boot-maven-plugin</artifactId>
  42. </plugin>
  43. </plugins>
  44. </build>
  45. </project>

开始使用Spring-data-mongodb
若MongoDB的安装配置采用默认端口,那么在自动配置的情况下,我们不需要做任何参数配置,就能马上连接上本地的MongoDB。下面直接使用spring-data-mongodb来尝试对mongodb的存取操作。(记得mongod启动您的mongodb)
  • 创建要存储的User实体,包含属性:id、username、age
  1. package com.xiaojingg.domain;
  2. import org.springframework.data.annotation.Id;
  3. /**
  4. * xiaojingg
  5. */
  6. public class User {
  7. @Id
  8. private Long id;
  9. private String username;
  10. private Integer age;
  11. public User(Long id, String username, Integer age) {
  12. this.id = id;
  13. this.username = username;
  14. this.age = age;
  15. }
  16. public Long getId() {
  17. return id;
  18. }
  19. public void setId(Long id) {
  20. this.id = id;
  21. }
  22. public String getUsername() {
  23. return username;
  24. }
  25. public void setUsername(String username) {
  26. this.username = username;
  27. }
  28. public Integer getAge() {
  29. return age;
  30. }
  31. public void setAge(Integer age) {
  32. this.age = age;
  33. }
  34. }
  • 实现User的数据访问对象:UserRepository
  1. package com.xiaojingg.domain;
  2. import org.springframework.data.mongodb.repository.MongoRepository;
  3. /**
  4. * 筱进GG
  5. */
  6. public interface UserRepository extends MongoRepository<User, Long> {
  7. User findByUsername(String username);
  8. }

参数配置
通过上面的例子,我们可以轻而易举的对MongoDB进行访问,但是实战中,应用服务器与MongoDB通常不会部署于同一台设备之上,这样就无法使用自动化的本地配置来进行使用。这个时候,我们也可以方便的配置来完成支持,只需要在application.properties中加入mongodb服务端的相关配置,具体示例如下:
spring.data.mongodb.uri = mongodb://localhost:27017/test

spring.data.mongodb.uri=mongodb://name:pass@localhost:27017/test
在尝试此配置时,记得在mongo中对test库创建具备读写权限的用户(用户名为name,密码为pass),不同版本的用户创建语句不同,注意查看文档做好准备工作,我这里没有名字和密码就不需要了;
  • 在单元测试中调用
我们看如下:
  1. package com.xiaojingg;
  2. import com.xiaojingg.domain.User;
  3. import com.xiaojingg.domain.UserRepository;
  4. import org.junit.Assert;
  5. import org.junit.Before;
  6. import org.junit.Test;
  7. import org.junit.runner.RunWith;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.boot.test.context.SpringBootTest;
  10. import org.springframework.test.context.junit4.SpringRunner;
  11. @RunWith(SpringRunner.class)
  12. @SpringBootTest
  13. public class SpringbootstudyDemo8MongdbApplicationTests {
  14. @Autowired
  15. private UserRepository userRepository;
  16. @Before
  17. public void setUp() {
  18. userRepository.deleteAll();
  19. }
  20. @Test
  21. public void test() throws Exception {
  22. // 创建三个User,并验证User总数
  23. userRepository.save(new User(1L, "keke", 30));
  24. userRepository.save(new User(2L, "GG", 40));
  25. userRepository.save(new User(3L, "QQ", 50));
  26. System.out.print("三个User:" + userRepository.findAll().size() + "\n");
  27. // 删除一个User,再验证User总数
  28. User u = userRepository.findOne(1L);
  29. userRepository.delete(u);
  30. System.out.print("删除一个User:" + userRepository.findAll().size() + "\n");
  31. // 删除一个User,再验证User总数
  32. u = userRepository.findByUsername("GG");
  33. userRepository.delete(u);
  34. System.out.print("删除一个User:" + userRepository.findAll().size() + "\n");
  35. }
  36. }


好了 我们完成了哟!





声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/845784
推荐阅读
相关标签
  

闽ICP备14008679号