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 ...
随机推荐
- CSP-S 2020模拟训练题1-信友队T1 四平方和
题意简述 \(n\)是正整数,其四个最小的因子分别为\(d_1,d_2,d_3,d_4\). 求对于所有的\(n \le m\)满足 \[d_1^2+d_2^2+d_3^2+d_4^2=n \] 的\ ...
- Java线程池原理及分析
线程池是很常用的并发框架,几乎所有需要异步和并发处理任务的程序都可用到线程池. 使用线程池的好处如下: 降低资源消耗:可重复利用已创建的线程池,降低创建和销毁带来的消耗: 提高响应速度:任务到达时,可 ...
- Linux下端口被占用,关掉端口占用的方法
Linux下端口被占用(例如端口3000),关掉端口占用的进程的方法: 1.netstat -tln | grep 3000 2.sudo lsof -i:3000 3.sudo kill -9 进程
- 10before_request钩子函数
1,什么是钩子函数? 就是运行别人前都得先运行他: from flask import Flask app = Flask(__name__) @app.route('/') def hello_wo ...
- Python--安装 PyQt5, pyqt5-tools
# 使用豆瓣镜像源 anaconda prompt界面里输入: pip install pyqt5-tools -i https://pypi.douban.com/simple/
- subString引起的index out of range
特别注意!!!低级坑 subString(begin,end) subList()均存在这个问题. 当end>String.size(),则index out of range!!!
- Innodb之线程独享内存
引用链接: https://blog.csdn.net/miyatang/article/details/54881547 https://blog.csdn.net/wyzxg/article/de ...
- 2018.1.22 js
1.JavaScrip运算符 [案例]a+=b 等价于 a=a+ba-=b 等价于 a=a-ba*=b 等价于 a=a*ba/=b 等价于 a=a/ba%=b 等价于 a%=b2.逻辑控制语句语法1: ...
- Dubbo 服务引入-Version2.7.5
1.服务引用原理 Dubbo 服务引用的时机有两个,第一个是在 Spring 容器调用 ReferenceBean 的 afterPropertiesSet 方法时引用服务,第二个是在 Referen ...
- 为什么说线程太多,cpu切换线程会浪费很多时间?
问题1: 假如有一个计算任务,计算1-100的和,每10个数相加,需要占用一个cpu时间片(1s).如果起一个线程(模拟没有线程切换),完成任务需要多长时间?如果起5个线程,完成任务需要消耗多久时间? ...