1. 程式人生 > >SpringBoot學習筆記(10):使用MongoDB來訪問數據

SpringBoot學習筆記(10):使用MongoDB來訪問數據

and exclude 包含 思維導圖 .org args 表示 告訴 http

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添加依賴

<?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來訪問數據