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 ...
随机推荐
- Hadoop调优 | NameNode主备宕机引发的思考
大家都知道在双十一这些电商大型营销活动期间,电商网站的访问量等是平时的N倍.每当这个时候到来,无论是开发还是运维人员都严阵以待生怕服务出现问题.很不幸,笔者的一个朋友在一家电商公司上班,在双十一时,恰 ...
- 白话科普系列——双十一,竟然是一场有“预谋”的DDoS攻击?
随著互联网与信息技术的发展,所有人都在享受互联网带来的舒适和便利.如今,无论是个人社交行为,还是商业活动都早已离不开互联网. 但是,网络空间在创造机遇的同时,也带来了威胁.随着企业价值.知名度的提高. ...
- GAMES101系列笔记一 图形学概述与线性代数入门
概述+线性代数 为什么学习图形学? Computer Graphics is AWESOME! 主要涉及内容: 光栅化 曲线和网格 光线追踪 动画与模拟 Differences between CG ...
- TP3 根据时间区间搜索的方法
/** * 时间段查询条件获取 * @param string $star 获取开始时间的字段名 * @param string $end 获取结束时间的字段名 * @param string $zd ...
- Flink Native Kubernetes实战
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- [LeetCode题解]19. 删除链表的倒数第N个节点 | 双指针 + 一次遍历
解题思路 双指针:第一个指针先走 n 步,然后两个指针同时走. 这里要注意当链表长度<=n,要删除头节点. 代码 /** * Definition for singly-linked list. ...
- Elementary OS安装及开发环境配置(一)
前言 假期在家无聊,刚好把六年前的一台笔记本电脑利用起来,原来电脑虽然说配置说不上古董机器,但是运行win系统感觉还是不流畅,所幸给换成Linux桌面版系统,在网上查阅了很多,Linux桌面系统要么推 ...
- 众所周知,B站并不是个学习网站
立了一个Flag鸽鸽鸽鸽 我喜立Flag,9月份说要做点视频,不知不觉已经鸽了俩月了.中间就零星时间学了一些剪辑方面的知识,工作太忙,视频一直没有实质进展.视频的灵魂其实是脚本,到现在还没写好.我还是 ...
- springboot中aop的使用
Spring AOP(Aspect Oriented Programming),即面向切面编程,是OOP(Object Oriented Programming,面向对象编程)的补充和完善. OOP引 ...
- 使用python统计《三国演义》小说里人物出现次数前十名,并实现可视化。
一.安装所需要的第三方库 jieba (jieba是优秀的中文分词第三分库) pyecharts (一个优秀的数据可视化库) <三国演义>.txt下载地址(提取码:kist ) 使用pyc ...