Spring Boot 使用docker整合MongoDB

關注能夠查看更多粉絲專享blog~java

前言

前面簡單介紹瞭如何使用docker安裝ElasticSearch、elasticsearch-head、elasticsearch ik和elasticsearch pinyin,今天學習一下MongoDB,都是一些如今用途很是普遍的一些中間件。程序員

ElasticSearch傳送門:web

Spring Boot 使用docker整合ElasticSearchspring

Spring Boot使用docker整合ElasticSearch ik分詞搜索和拼音搜索mongodb

簡介

MongoDB是一個文檔數據庫,這意味着它將數據存儲在相似JSON的文檔中。咱們認爲,這是考慮數據的最天然方法,比傳統的行/列模型更具表現力和功能。docker

  1. 豐富的JSON文檔
    • 處理數據的最天然,最有效的方式。
    • 支持數組和嵌套對象做爲值。
    • 容許靈活和動態的模式。
  2. 強大的查詢語言
    • 豐富而富有表現力的查詢語言,不管您在文檔中有多嵌套,均可以按任何字段進行過濾和排序。
    • 支持聚合和其餘現代用例,例如基於地理的搜索,圖形搜索和文本搜索。
    • 查詢自己就是JSON,所以很容易組合。再也不須要鏈接字符串來動態生成SQL查詢。
  3. 關係數據庫的全部功能,以及更多...
    • 具備快照隔離的分佈式多文檔ACID事務。
    • 支持查詢聯接。
    • 兩種類型的關係,而不是一種:引用和嵌入式。

適用場景

MongoDB 的主要目標是在鍵/值存儲方式(提供了高性能和高度伸縮性)和傳統的RDBMS 系統(具備豐富的功能)之間架起一座橋樑。shell

  1. 網站數據:Mongo 很是適合實時的插入,更新與查詢,並具有網站實時數據存儲所需的複製及高度伸縮性。
  2. 緩存:因爲性能很高,Mongo 也適合做爲信息基礎設施的緩存層。在系統重啓以後,由Mongo 搭建的持久化緩存層能夠避免下層的數據源過載。
  3. 大尺寸、低價值的數據:使用傳統的關係型數據庫存儲一些數據時可能會比較昂貴,在此以前,不少時候程序員每每會選擇傳統的文件進行存儲。
  4. 高伸縮性的場景:Mongo 很是適合由數十或數百臺服務器組成的數據庫,Mongo 的路線圖中已經包含對MapReduce 引擎的內置支持。
  5. 用於對象及JSON 數據的存儲:Mongo 的BSON 數據格式很是適合文檔化格式的存儲及查詢。

安裝MongoDB

// 拉取鏡像
docker pull mongo

// 查看是否拉取成功
docker images

// 運行鏡像,建立容器指定端口27017
docker run -itd --name mongo -p 27017:27017 mongo

// 檢查容器是都啓動成功
docker ps

// 進入容器
docker exec -it mongo mongo

// 建立數據庫
use mydb

// 建立collection
db.createCollection('test')

// 插入數據
db.test.insert({id:1,name:'david',age:18})
複製代碼

前面拉取操做就不截圖了,下面是啓動和設置部分的截圖參考數據庫

docker mongodb
咱們使用可視化工具看一下,數據已經插入成功了。
Studio 3T

Spring Boot 整合 MongoDB

  1. 使用IDEA新建一個Spring Boot工程,選擇web和mongodb
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
複製代碼
  1. 配置文件內容修改application.yml
spring:
 data:
 mongodb:
 uri: mongodb://127.0.0.1:27017/
 database: mydb
 application:
 name: mongo-demo
server:
 port: 8080

複製代碼
  1. 正常啓動,下面咱們編寫一些代碼操做MongoDB看看。
    啓動
  2. 編寫代碼操做MongoDB
    目錄結構

UserEntity代碼數組

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Document(collection = "test")
public class UserEntity {

    @Id
    private Long id;

    private String name;

    private Integer age;

}

複製代碼

UserRepository 代碼緩存

import com.example.mongo.entity.UserEntity;

import org.springframework.data.mongodb.repository.MongoRepository;

import java.util.List;

public interface UserRepository extends MongoRepository<UserEntity, Long> {

    List<UserEntity> findByNameLike(String name);

}

複製代碼

UserService 代碼

import com.example.mongo.entity.UserEntity;

import java.util.List;

public interface UserService {

    void save( UserEntity userEntity );

    void save( List<UserEntity> userEntity );

    void delete( Long id );

    List<UserEntity> findByName( String name );

    UserEntity findById( Long id );

}
複製代碼

UserServiceImpl 代碼

import com.example.mongo.entity.UserEntity;
import com.example.mongo.repository.UserRepository;
import com.example.mongo.service.UserService;

import org.springframework.stereotype.Service;

import java.util.List;

import javax.annotation.Resource;

@Service
public class UserServiceImpl implements UserService {

    @Resource
    private UserRepository userRepository;

    @Override
    public void save( UserEntity userEntity ) {
        userRepository.save(userEntity);
    }

    @Override
    public void save( List<UserEntity> userEntity ) {
        userRepository.saveAll(userEntity);
    }

    @Override
    public void delete( Long id ) {
        userRepository.deleteById(id);
    }

    @Override
    public List<UserEntity> findByName( String name ) {
        return userRepository.findByNameLike(name);
    }

    @Override
    public UserEntity findById( Long id ) {
        return userRepository.findById(id).orElse(new UserEntity());
    }
}
複製代碼

MongoApplicationTests

@SpringBootTest
class MongoApplicationTests {

    @Resource
    private UserService userService;

    @Test
    void save() {
        List<UserEntity> users = new ArrayList<>();
        for (int i = 1; i <= 20; i++) {
            UserEntity user = UserEntity.builder().id((long) i).name("Davids" + i).age(i).build();
            users.add(user);
        }
        userService.save(users);
    }

    @Test
    void find() {
        UserEntity byId = userService.findById(1L);
        System.out.println(byId);
        List<UserEntity> dav = userService.findByName("1");
        dav.forEach(System.out::print);
    }

    @Test
    void update() {
        userService.save(UserEntity.builder().id(1L).name("Davids edit").age(16).build());
    }

    @Test
    void delete() {
        userService.delete(1L);
    }

}
複製代碼

總結

MongoDB使用Repository的時候咱們能夠以下圖同樣自由經過方法名來編寫方法好比findByNameLike就是根據名稱模糊查詢,還挺有趣的,但願你們能學以至用,共勉~

Repository
相關文章
相關標籤/搜索