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
相关文章
相关标签/搜索