SpringBoot学习笔记(10):使用MongoDB来访问数据

快速开始

  本指南将引导您完成使用Spring Data MongoDB构建应用程序的过程,该应用程序将数据存储在MongoDB(基于文档的数据库)中并从中检索数据。关于MongoDB的相关教程可以参考其官方文档或者笔者的相关教程,我们主要探讨在SpringBoot中快速开始MongoDB数据库服务的相关操作。

  本节内容的思维导图大致如下:

  

参考教程:

https://spring.io/guides/gs/accessing-data-mongodb/

https://spring.io/guides/gs/accessing-mongodb-data-rest/

基于Maven添加依赖

  首先,需要设置一个基本的构建脚本。在使用Spring构建应用程序时,您可以使用任何您喜欢的构建系统,但此处包含了使用Maven所需的代码。

  如果您不熟悉Maven,请参阅使用Maven构建Java项目。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>org.springframework</groupId>
<artifactId>gs-accessing-data-mongodb</artifactId>
<version>0.1.0</version> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
</parent> <properties>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build> <repositories>
<repository>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
</project>

定义一个简单的实体

import org.springframework.data.annotation.Id;

public class User {
@Id
private Integer id;
private String username;
private String password; public User(Integer id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
  //get,set访问器隐藏了 @Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}

  id主要供MongoDB内部使用。在创建新实例时,您还有一个构造函数来填充实体。id符合MongoDB id的标准名称,因此它不需要任何特殊的注解来为Spring Data MongoDB标记它,即使用Spring Data提供的ID注解就可以了。其他两个属性未注释,表示它们将映射到与属性本身共享同一名称的字段。

  MongoDB将数据存储在集合中。 Spring Data MongoDB将User类映射到一个名为User的集合。如果要更改集合的名称,可以在类上使用Spring Data MongoDB的@Document批注。

创建一个简单的查询

  Spring Data MongoDB专注于在MongoDB中存储数据。它还继承了Spring Data Commons项目的功能,例如派生查询的功能。基本上,您不必学习MongoDB的查询语言;你可以简单地编写一些方法,并为你编写查询。
我们创建一个repository interface来演示一下查询功能
import com.mrsaber.filebar.domain.User;
import org.springframework.data.mongodb.repository.MongoRepository; public interface UserRepository extends MongoRepository<User,Integer> {
public User findByUsername(String username);
}

  UserRepository扩展了MongoRepository接口并插入了它的工作原理:User和Integer,即管理域类以及域类的ID类型作为类型参数。开箱即用,该界面带有许多操作,包括标准CRUD操作(create-read-update-delete)  

创建应用程序类

package com.mrsaber.filebar;

import com.mrsaber.filebar.domain.User;
import com.mrsaber.filebar.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
public class FilebarApplication implements CommandLineRunner { public static void main(String[] args) {
SpringApplication.run(FilebarApplication.class, args);
} @Autowired
private UserRepository userRepository; @Override
public void run(String... args) throws Exception {
userRepository.save(new User(1,"admin","123456"));
System.out.println(userRepository.findByUsername("admin"));
}
}

  main()方法使用Spring Boot的SpringApplication.run()方法启动应用程序。你有没有注意到没有一行XML?没有web.xml文件。这个Web应用程序是100%纯Java,您不必处理配置任何管道或基础设施。Spring Boot将自动处理这些存储库,只要它们包含在@SpringBootApplication类的相同包(或子包)中即可。为了更好地控制注册过程,您可以使用@EnableMongoRepositories注解。

  默认情况下,@EnableMongoRepositories将扫描当前包中的任何扩展Spring Data存储库接口的接口。使用它的basePackageClasses = MyRepository.class安全地告诉Spring Data MongoDB按类型扫描不同的根包,如果你的项目布局有多个项目并且没有找到你的存储库。

说明:

我们可以在配置文件中指定数据库、主机、端口号等信息

spring.data.mongodb.database=myDB
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

如果此时你程序启动出现问题,需要加入最后一行!

使用REST访问MongoDB数据

添加REST服务依赖

 <!--添加REST依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>

什么是Spring-Data-REST?

  Spring Data REST是Spring Data项目的一部分,可以帮助我们很容易地在Spring Data存储库之上构建HTTP驱动的REST Web服务。官方文档地址:https://docs.spring.io/spring-data/rest/docs/3.0.8.RELEASE/reference/html/

创建文档仓库

import com.mrsaber.filebar.domain.User;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource; @RepositoryRestResource(collectionResourceRel = "user", path = "user")
public interface UserRepository extends MongoRepository<User,Integer> {
public User findByUsername(String username);
}

  这个存储库是一个接口,并允许您执行涉及user对象的各种操作。它通过扩展MongoRepository来获得这些操作,这反过来又扩展了Spring Data Commons中定义的PagingAndSortingRepository接口。 在运行时,Spring Data REST将自动创建该接口的实现。然后它将使用@RepositoryRestResource注释来指导Spring MVC在/ people处创建RESTful端点。

构建可执行应用程序

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
public class FilebarApplication{ public static void main(String[] args) {
SpringApplication.run(FilebarApplication.class, args);
}
}

测试运行结果

您可从该文档中学习查询方式:https://spring.io/guides/gs/accessing-mongodb-data-rest/ 或等待笔者的后续教程。

  

  

SpringBoot学习笔记(10):使用MongoDB来访问数据的更多相关文章

  1. SpringBoot学习笔记(10)-----SpringBoot中使用Redis/Mongodb和缓存Ehcache缓存和redis缓存

    1. 使用Redis 在使用redis之前,首先要保证安装或有redis的服务器,接下就是引入redis依赖. pom.xml文件如下 <dependency> <groupId&g ...

  2. thinkphp学习笔记10—看不懂的路由规则

    原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...

  3. SpringBoot学习笔记(14):使用SpringBootAdmin管理监控你的应用

    SpringBoot学习笔记(14):使用SpringBootAdmin管理监控你的应用 Spring Boot Admin是一个管理和监控Spring Boot应用程序的应用程序.本文参考文档: 官 ...

  4. SpringBoot学习笔记(3):静态资源处理

    SpringBoot学习笔记(3):静态资源处理 在web开发中,静态资源的访问是必不可少的,如:Html.图片.js.css 等资源的访问. Spring Boot 对静态资源访问提供了很好的支持, ...

  5. SpringBoot学习笔记(2):引入Spring Security

    SpringBoot学习笔记(2):用Spring Security来保护你的应用 快速开始 本指南将引导您完成使用受Spring Security保护的资源创建简单Web应用程序的过程. 参考资料: ...

  6. SpringBoot学习笔记(7):Druid使用心得

    SpringBoot学习笔记(7):Druid使用心得 快速开始 添加依赖 <dependency> <groupId>com.alibaba</groupId> ...

  7. SpringBoot学习笔记(11):使用WebSocket构建交互式Web应用程序

    SpringBoot学习笔记(11):使用WebSocket构建交互式Web应用程序 快速开始 本指南将引导您完成创建“hello world”应用程序的过程,该应用程序在浏览器和服务器之间来回发送消 ...

  8. Python3+Selenium3+webdriver学习笔记10(元素属性、页面源码)

    #!/usr/bin/env python# -*- coding:utf-8 -*-'''Selenium3+webdriver学习笔记10(元素属性.页面源码)'''from selenium i ...

  9. SpringBoot学习笔记:Swagger实现文档管理

    SpringBoot学习笔记:Swagger实现文档管理 Swagger Swagger是一个规范且完整的框架,用于生成.描述.调用和可视化RESTful风格的Web服务.Swagger的目标是对RE ...

随机推荐

  1. 【Maven】3.使用IntelliJ IDEA 使用本地搭建的maven私服,而不是使用默认的maven设置

    安装Idea的教程:http://www.cnblogs.com/sxdcgaq8080/p/7641379.html 搭建maven私服的教程:http://www.cnblogs.com/sxdc ...

  2. 服务器性能之CPU

    有时我们会发现开发的应用在CPU核数一样的虚拟服务器上性能表现出较大的差异,这是为什么呢?上次有童鞋问到我这样一个问题,所以我根据自己的理解给大家简说下! CPU生产商为了提高CPU的性能,通常做法是 ...

  3. ListView嵌套两个EditText相关显示问题

    这里说明:本人第一次写博客,可能写的不算太好.可是这个相关类型的研究与拓展,是项目中比較难得的.所以开一篇博客来总结和思考.先让我们看看项目需求. 项目需求说明: 1.须要在点击EditText的时候 ...

  4. URAL1306 Sequence Median(卡内存神题)

    给出n个数,n<=250000,求这n个数的中位数,内存限制1mb 卡内存的神题,用数组存下来刚好1mb,再加上执行时消耗内存.立即爆. 因此我们用优先队列存储一半的数. 网上的某些代码,用pr ...

  5. vue.js+koa2项目实战(六)数据库建表

    数据库建表 1.打开 MySQL 终端 2.查看所有数据库 show databases 3.创建数据库 create database pet 4.进入数据库 use pet 5.创建数据表 cre ...

  6. PHP之面向对象学习

    1.类 Class lio{ Public Protect Private Function __constructor(){} } 2.类的实例化 <? php class lio{ //定义 ...

  7. 关于PM的认识

    1 我眼中的PM 1.1 人云“一个管理,半个专家”,我说“一个管理,两个专家” 如今,我发现我们不得不面对这样一个现实——角色兼职.我习惯上把项目分为三类:性命攸关的项目(涉及到人身安全的项目,如铁 ...

  8. INSTALL_FAILED_UID_CHANGED解决的方法

    近期开发过程中又遇到了这个问题,最终找到了一个比較好的解决的方法.在此记录下. 打开手机或者pad中的设置----->安全----->未知来源(同意安装非安卓市场应用程序). 把这个取消, ...

  9. cenos7 修改hostname

    hostnamectl set-hostname Linuxidc 如何在CentOS 7上修改主机名 在CentOS中,有三种定义的主机名:静态的(static),瞬态的(transient),和灵 ...

  10. Linux下文件名正常,下载之后在windows打开为乱码

    说明:在Linux下编码为utf-8,在windows下位GBK 1. 2. 3. 4. 5. 6. 7. 8.