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 ...
随机推荐
- Git 2.20.1 安装及配置
一.下载地址 https://git-scm.com/downloads 二.安装步骤1.windows 64bit1.1)双击 Git-2.20.1-64-bit.exe 安装 1.2)选择安装 ...
- 跟我一起学.NetCore之EF Core 实战入门,一看就会
前言 还记得当初学习数据库操作时,用ADO.NET一步一步地进行数据操作及查询,对于查询到的数据还得对其进行解析,然后封装返回给应用层:遇到这种重复而繁琐的工作,总有一些大神或团队对其进行封装,从而出 ...
- 转载:Pycharm的常用快捷键
一直想着找一下pycharm的快捷键,但是每次都忘记找了,这次刚好碰到一个很全的,就直接借用别人的来当作自己的笔记ba 转载来源:https://www.cnblogs.com/liangmingsh ...
- mybatis print sql config
log4j.rootLogger=DEBUG, Console #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log ...
- JS如何判断表单中用户选择哪个哪个选项?
JS如何判断表单中用户选择哪个哪个选项? HTML代码: <form name="form1" onsubmit="return foo();"> ...
- linux netfilter ----iptable_filter
内核中将filter模块被组织成了一个独立的模块,每个这样独立的模块中都有个类似的init()初始化函数:首先来看一下filter模块是如何将自己的钩子函数注册到netfilter所管辖的几个hook ...
- Best Time to Buy and Sell Stock I II III IV
一.Best Time to Buy and Sell Stock I Say you have an array for which the ith element is the price of ...
- 06 Vue路由简介,原理,实现及嵌套路由,动态路由
路由概念 路由的本质就是一种对应关系,比如说我们在url地址中输入我们要访问的url地址之后,浏览器要去请求这个url地址对应的资源. 那么url地址和真实的资源之间就有一种对应的关系,就是路由. 路 ...
- 控制算法PID-理解分析1
以下内容是来自网络上的,本人觉得有道理,拷贝下来,由于没有找到最源头的出处,没有注明来自何方. 转载,下面说法应该更通俗易懂一家庭,每次需要开支的时候丈夫P都要拿卡去取钱.需要多少取多少,因为银行最低 ...
- 下载器Folx如何实现排队下载功能
用户在下载多个文件时,当然会希望这些文件都能同时下载,以达到短时间内完成下载任务的目的.但另一方面来说,同时下载过多文件,会分散带宽资源,降低了每个文件的下载速度,从而导致下载时间的延长. 为了实现多 ...