前面简单介绍了如何使用docker安装ElasticSearch、elasticsearch-head、elasticsearch ik和elasticsearch pinyin,今天学习一下MongoDB,都是一些现在用途非常广泛的一些中间件。
ElasticSearch传送门: Spring Boot 使用docker整合ElasticSearch Spring Boot使用docker整合ElasticSearch ik分词搜索和拼音搜索
MongoDB是一个文档数据库,这意味着它将数据存储在类似JSON的文档中。我们认为,这是考虑数据的最自然方法,比传统的行/列模型更具表现力和功能。
MongoDB 的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)和传统的RDBMS 系统(具有丰富的功能)之间架起一座桥梁。
// 拉取镜像
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})
复制代码 
 前面拉取操作就不截图了,下面是启动和设置部分的截图参考
 
 我们使用可视化工具看一下,数据已经插入成功了。
 
 <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>
复制代码 
 application.yml spring:
  data:
    mongodb:
      uri: mongodb://127.0.0.1:27017/
      database: mydb
  application:
    name: mongo-demo
server:
  port: 8080
复制代码 
 
 
   
 
    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 就是根据名称模糊查询,还挺有趣的,希望大家能学以致用,共勉~