前面简单介绍了如何使用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
就是根据名称模糊查询,还挺有趣的,希望大家能学以致用,共勉~