本文分别使用 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 使用示例的更多相关文章

  1. spring boot MongoDB的集成和使用

    前言 上一章节,简单讲解了如何集成Spring-data-jpa.本章节,我们来看看如何集成NoSQL的Mongodb.mongodb是最早热门非关系数据库的之一,使用也比较普遍.最适合来存储一些非结 ...

  2. Spring Boot Mongodb

    Spring注解学习,有助于更好的理解下面代码: @ConditionOnClass表明该@Configuration仅仅在一定条件下才会被加载,这里的条件是Mongo.class位于类路径上 @En ...

  3. spring boot 入门及示例

    需要环境:eclipse4.7.3 + jdk1.8 +maven3.6.1 + tomcat(web需要) spring boot官网介绍:https://spring.io/guides/gs/s ...

  4. Spring Boot Jersey使用示例

    前言 本文将学习如何使用Spring Boot和Jersey框架,去配置和创建JAX-RS 2.0 REST API接口: 这个示例应用使用的是Jersey的Servlet容器去部署REST API接 ...

  5. Spring Boot MongoDB JPA 简化开发

    使用SpringBoot提供的@Repository接口,可以完成曾经需要大量代码编写和配置文件定制工作.这些以前让新手程序员头疼,让有经验的程序员引以为傲的配置,由于框架的不断完善,变得不那么重要, ...

  6. Spring Boot + RabbitMQ 使用示例

    基础知识 虚拟主机 (Virtual Host): 每个 virtual host 拥有自己的 exchanges, queues 等 (类似 MySQL 中的库) 交换器 (Exchange): 生 ...

  7. spring boot thymeleaf简单示例

    说实话,用起来很难受,但是人家官方推荐,咱得学 如果打成jar,这个就合适了,jsp需要容器支持 引入依赖 <dependency> <groupId>org.springfr ...

  8. Spring Boot MongoDB 查询操作 (BasicQuery ,BSON)

    MongoDB 查询有四种方式:Query,TextQuery,BasicQuery 和 Bson ,网上太多关于 Query 的查询方式,本文只记录 BasicQuery和Bson 的方式,Basi ...

  9. spring boot MongoDb配置和多数据源

    配置文件: # MongoDB配置项 mongodb.base.host: 192.168.1.204 mongodb. mongodb.base.database: xxx mongodb.base ...

随机推荐

  1. 微信小程序跳转到微信公众号

    我这里是uniapp里的操作 微信开发者工具配置 微信小程序官网地址:official-account 公众号关注组件. 当用户扫小程序码打开小程序时,开发者可在小程序内配置公众号关注组件,方便用户快 ...

  2. VSCcode中使用git

    1.配置 文件 -> 首选项 -> 配置 出现json格式的配置项,左侧为默认设置,右侧为自定义设置: 加一行: "git.path":  Git目录下cmd下的git ...

  3. python00

    # Python* [什么是 Python 生成器?](#什么是-Python-生成器)* [什么是 Python 迭代器?](#什么是-Python-迭代器)* [list 和 tuple 有什么区 ...

  4. 最全总结 | 聊聊 Python 办公自动化之 Word(上)

    1. 前言 日常自动化办公中,使用 Python 真的能做到事半功倍! 在上一个系列中,我们对 Python 操作 Excel 进行了一次全面总结 最全总结 | 聊聊 Python 办公自动化之 Ex ...

  5. MySQL全面瓦解9:查询的排序、分页相关

    概述 数据库中的数据直接呈现出来一般不是我们想要的,所以我们上两节演示了如何对数据进行过滤的方法.除了对数据进行过滤, 我们可能还需要对数据进行排序,比如想从列表中了解消费最高的项,就可能需要对金额字 ...

  6. php支付宝签名验证类

    <?php /* * 黎明互联 * https://www.liminghulian.com/ */ class RSA { /** * RSA签名 * @param $data 待签名数据 * ...

  7. linux 源码下载和在线查看网站

    下载: https://www.kernel.org/ 查看: https://elixir.bootlin.com/linux/

  8. Linux安装JAVA并且配置环境

    在写之前我先说一下我遇到的坑,我在配置环境的时候由于/etc/profile文件没有配置好导致系统彻底坏掉 1.ls vi等等命令使用不了,报错说找不到命令 2.在重启后虚拟机不能进入桌面 1.下载j ...

  9. Flink处理函数实战之二:ProcessFunction类

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  10. 6、Sping Boot消息

    1.消息概述 可通过消息服务中间件来提升系统异步通信.扩展解耦能力 消息服务中两个重要概念:消息代理(message broker)和目的地(destination)当消息发送者发送消息以后,将由消息 ...