Spring Boot + MongoDB 使用示例
本文分别使用 MongoRepository 和 MongoTemplate 实现 MongoDB 的简单的增删改查
本文使用 docker 安装 MongoDB:
使用示例
application.yml:
spring:
data:
mongodb:
uri: mongodb://test:123456@192.168.30.101:27017/test
entity:
public class User {
@Id
private String id;
private String name;
private Integer gender;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate birthday;
/*getter setter*/
}
service:
public interface UserService {
User save(User user);
void deleteById(String id);
void deleteAll();
Iterable<User> findAll();
Iterable<User> findAll(Integer pageNum, Integer pageSize);
List<User> findAllByName(String name);
Page<User> findAllByName(Integer pageNum, Integer pageSize, String name);
}
1.1 使用 MongoRepository
1.1.1 新建 UserMongoRepository
public interface UserMongoRepository extends MongoRepository<User, String> {
List<User> findByName(String name);
}
1.1.2 新建 UserServiceMongoRepository
@Profile("MongoRepository")
@Service
public class UserServiceMongoRepository implements UserService {
@Autowired
private UserMongoRepository userMongoRepository;
@Override
public User save(User user) {
return userMongoRepository.save(user);
}
@Override
public void deleteById(String id) {
userMongoRepository.deleteById(id);
}
@Override
public void deleteAll() {
userMongoRepository.deleteAll();
}
@Override
public Iterable<User> findAll() {
return userMongoRepository.findAll();
}
@Override
public Iterable<User> findAll(Integer pageNum, Integer pageSize) {
Pageable pageable = PageRequest.of(pageNum, pageSize);
return userMongoRepository.findAll(pageable);
}
@Override
public List<User> findAllByName(String name) {
return userMongoRepository.findByName(name);
}
@Override
public Page<User> findAllByName(Integer pageNum, Integer pageSize, String name) {
User user = new User();
user.setName(name);
ExampleMatcher matcher = ExampleMatcher.matching();
Example<User> userExample = Example.of(user, matcher);
Pageable pageable = PageRequest.of(pageNum, pageSize);
return userMongoRepository.findAll(userExample, pageable);
}
}
1.2 使用 MongoTemplate
1.2.1 新建 UserServiceMongoTemplate
@Profile("MongoTemplate")
@Service
public class UserServiceMongoTemplate implements UserService {
@Autowired
private MongoTemplate mongoTemplate;
@Override
public User save(User user) {
return mongoTemplate.save(user);
}
@Override
public void deleteById(String id) {
Query query = new Query(Criteria.where("id").is(id));
mongoTemplate.remove(query);
}
@Override
public void deleteAll() {
mongoTemplate.remove(User.class);
}
@Override
public Iterable<User> findAll() {
return mongoTemplate.findAll(User.class);
}
@Override
public Iterable<User> findAll(Integer pageNum, Integer pageSize) {
Query query = new Query();
query.skip(pageNum * pageSize);
query.limit(pageSize);
return mongoTemplate.find(query, User.class);
}
@Override
public List<User> findAllByName(String name) {
Query query = new Query(Criteria.where("name").is(name));
return mongoTemplate.find(query, User.class);
}
@Override
public Page<User> findAllByName(Integer pageNum, Integer pageSize, String name) {
Query query = new Query();
query.skip(pageNum * pageSize);
query.limit(pageSize);
Criteria criteria = new Criteria();
criteria.and("name").equals(name);
query.addCriteria(criteria);
List<User> userList = mongoTemplate.find(query, User.class);
long total = mongoTemplate.count(query, User.class);
Pageable pageable = PageRequest.of(pageNum, pageSize);
Page<User> userPage = new PageImpl(userList, pageable, total);
return userPage;
}
}
完整代码:GitHub
存在问题
MongoRepository 中 deleteById 和 MongoTemplate 中 deleteById, deleteAll 未生效,暂不知原因
Spring Boot + MongoDB 使用示例的更多相关文章
- spring boot MongoDB的集成和使用
前言 上一章节,简单讲解了如何集成Spring-data-jpa.本章节,我们来看看如何集成NoSQL的Mongodb.mongodb是最早热门非关系数据库的之一,使用也比较普遍.最适合来存储一些非结 ...
- Spring Boot Mongodb
Spring注解学习,有助于更好的理解下面代码: @ConditionOnClass表明该@Configuration仅仅在一定条件下才会被加载,这里的条件是Mongo.class位于类路径上 @En ...
- spring boot 入门及示例
需要环境:eclipse4.7.3 + jdk1.8 +maven3.6.1 + tomcat(web需要) spring boot官网介绍:https://spring.io/guides/gs/s ...
- Spring Boot Jersey使用示例
前言 本文将学习如何使用Spring Boot和Jersey框架,去配置和创建JAX-RS 2.0 REST API接口: 这个示例应用使用的是Jersey的Servlet容器去部署REST API接 ...
- Spring Boot MongoDB JPA 简化开发
使用SpringBoot提供的@Repository接口,可以完成曾经需要大量代码编写和配置文件定制工作.这些以前让新手程序员头疼,让有经验的程序员引以为傲的配置,由于框架的不断完善,变得不那么重要, ...
- Spring Boot + RabbitMQ 使用示例
基础知识 虚拟主机 (Virtual Host): 每个 virtual host 拥有自己的 exchanges, queues 等 (类似 MySQL 中的库) 交换器 (Exchange): 生 ...
- spring boot thymeleaf简单示例
说实话,用起来很难受,但是人家官方推荐,咱得学 如果打成jar,这个就合适了,jsp需要容器支持 引入依赖 <dependency> <groupId>org.springfr ...
- Spring Boot MongoDB 查询操作 (BasicQuery ,BSON)
MongoDB 查询有四种方式:Query,TextQuery,BasicQuery 和 Bson ,网上太多关于 Query 的查询方式,本文只记录 BasicQuery和Bson 的方式,Basi ...
- spring boot MongoDb配置和多数据源
配置文件: # MongoDB配置项 mongodb.base.host: 192.168.1.204 mongodb. mongodb.base.database: xxx mongodb.base ...
随机推荐
- Python 1-5】Python教程之——字符串
字符串或串(String)是由数字.字母.下划线组成的一串字符. 字符串 字符串就是一系列字符.在Python中,用引号括起的都是字符串,其中的引号可以是单引号, 也可以是双引号,如下所示: &quo ...
- JDK新特性-Lambda表达式的神操作
一.Lambda表达式的介绍 Lambda表达式是 Java8 中最重要的新功能之一.使用 Lambda 表达 式可以替代只有一个抽象函数的接口实现,告别匿名内部类,代码看 起来更简洁易懂.Lambd ...
- Java_枚举
枚举 JDK1.5引入枚举类型, 枚举类型的定义包括枚举的声明和枚举体 enum Season { SPRING, SUMMER, AUTUMN, WINDER } 所有的枚举类型隐性的继承来自jav ...
- 用Matlab对导出的数据进行可视化
我这里是MapReduce导出的数据,MapReduce导出的数据中,Key和Value之间用制表符分隔的,可以直接作为表格型数据进行操作,复制一下导出的数据 1. 首先在Matlab工作区创建一个元 ...
- MySQL 使用规范总结
MySQL已经成为世界上最受欢迎的数据库管理系统之一,无论是用在小型开发项目上,还是用在构建那较大型的网站,MySQL都用实力证明了自己是一个稳定.可靠.快速.可信的系统,足以胜任任何数据存储业务的需 ...
- link和@import引入css 区别,不建议使用@import
众多周知,有两种方法可以在页面中导入样式文件. <link href="a.css" rel="stylesheet"> <style> ...
- Spider_基础总结1_Request(get/post__url传参_headers_timeout)+Reponse
网络爬虫(一) 一.简介 1.robot协议(爬虫协议):这个协议告诉引擎哪些页面可以抓取,哪些不可以 -User-agent:爬虫引擎 -allow:允许robot访问的URL -disallow: ...
- PyCharm离线安装PyQt5_tools(QtDesigner)
目录 下载所需的whl包 安装whl 配置PyCharm 测试 下载所需的whl包 打开链接 PyPI,依此搜索 python_dotenv,PyQt5_sip,PyQt5,pyqt5_tools:基 ...
- shell编程之俄罗斯方块
按键获取: 向上 ^[[A 向下 ^[[B 向左 ^[[D 向右 ^[[C 其中 ^[为ESC键. 按键获取的具体shell代码如下所示: #! /bin/bash GetKey() { a ...
- python中 try、except、finally 的执行顺序(转)
def test1(): try: print('to do stuff') raise Exception('hehe') print('to return in try') return 'try ...