本文分别使用 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. python数据分析02语法基础

    在我来看,没有必要为了数据分析而去精通Python.我鼓励你使用IPython shell和Jupyter试验示例代码,并学习不同类型.函数和方法的文档.虽然我已尽力让本书内容循序渐进,但读者偶尔仍会 ...

  2. 客户的一个紧急bug,我用了两种方式进行 C# 反编译修改源码

    一:背景 1. 讲故事 周五下午运营反馈了一个紧急bug,说客户那边一个信息列表打不开,急需解决,附带的日志文件也发过来了,看了下日志大概是这样的: 日期:2020-11-13 12:25:45,92 ...

  3. http 怎样关闭

    如何优雅的关闭关闭这个fd , 如果只是一个简单的fd 直接调用close 就行, 但是如果要是一个框架 那就接到 资源回收复用 内存泄漏等问题: 来看看 ngx 是用怎样的思路处理 事务结束动作: ...

  4. MySQL时间类型datetime、bigint及timestamp的查询效率

    前期数据准备 通过程序往数据库插入 50w 数据 数据表: CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `time_dat ...

  5. Python_案例_斐波那契数

    方法一: 1 #!/usr/bin/python3 2 3 # Fibonacci series: 斐波纳契数列 4 # 两个元素的总和确定了下一个数 5 a, b = 0, 1 6 while b ...

  6. 你真的能分清putc()函数和fputc()函数吗?

    最近小编在讲关于C语言文件部分内容,讲到了fputc()函数.前面在讲字符串的时候,我们还学习过putc()函数,我们知道,putc()函数一般用于标准输出,fputc()函数一般用于文件读写.刚才呢 ...

  7. NPOT纹理与平铺模式OpenGL规范

    OpenGL规范从2.0开始支持显示边长为非2次幂的Texture,但限制条件是需要环绕模式为CLAMP_TO_EDGE并且过滤模式为NEAREST或者LINEAR. 解除限制的条件是硬件支持OES_ ...

  8. Weblogic CVE-2020-2551漏洞复现&CS实战利用

    Weblogic CVE-2020-2551漏洞复现 Weblogic IIOP 反序列化 漏洞原理 https://www.anquanke.com/post/id/199227#h3-7 http ...

  9. phpmyadmin反序列化漏洞(WooYun-2016-199433)

    简介 环境复现:https://github.com/vulhub/vulhub 线上平台:榆林学院内可使用协会内部的网络安全实验平台 phpMyAdmin是一套开源的.基于Web的MySQL数据库管 ...

  10. 厉害!这份阿里面试官 甩出的Spring源码笔记,GitHub上已经爆火

    前言 时至今日,Spring 在 Java 生态系统与就业市场上,面试出镜率之高,投产规模之广,无出其右.随着技术的发展,Spring 从往日的 IoC 框架,已发展成 Cloud Native 基础 ...