本文分别使用 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. 面试小问题——Object中有哪些常用方法?

    一.equals方法 Object类中的equals方法用于检测一个对象是否等于另外一个对象.Java语言规范要求equals方法具有下面的特性: (1)自反性:对于任何非空引用x,x.equals( ...

  2. 2.1获取Git仓库-2.2记录每次更新到仓库

    2.1 获取 Git 仓库 获取 Git 仓库通常有两种方式 将尚未进行版本控制的本地目录转换为 Git 仓库: 从其它服务器 克隆 一个已存在的 Git 仓库. 在已存在目录中初始化仓库 首先进入该 ...

  3. Android Google官方文档解析之——System Permissions

    Android is a privilege-separated operating system, in which each application runs with a distinct sy ...

  4. leetcode144add-two-numbers

    题目描述 给定两个代表非负数的链表,数字在链表中是反向存储的(链表头结点处的数字是个位数,第二个结点上的数字是十位数...),求这个两个数的和,结果也用链表表示. 输入:(2 -> 4 -> ...

  5. 利用MultipartFile来进行文件上传

    这个例子实在SpringMVC的基础上完成的,因此在web.xml中需要配置 web.xml <!-- 配置Spring MVC的入口 DispatcherServlet,把所有的请求都提交到该 ...

  6. 利用Servlet做一套增删改查

    真的,稳住,考上研,利用两年逆袭.一步一步来,实在不行,最后最差也不过就是就回家种地,想想也不错. 前期准备配置 建一个动态web项目 新建Dynamic Web ProjectFile->Ne ...

  7. Linux下Flask环境

    一,安装python3.6.4 wget http://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz tar -xvzf Python-3.6.4. ...

  8. 14flask 渲染富文本编辑器

    转载一个flask 渲染富文本编辑器: https://blog.csdn.net/qq_32198277/article/details/53355249 这里会产生一个问题: 通过富文本编辑器的数 ...

  9. pipe()管道通信

    管道 管道的概念: 管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递.调用pipe系统函数即可创建一个管道.有如下特质: 1. 其本质是一个伪文件(实为内核缓冲区) 2. 由两个 ...

  10. 在spark上构造随机森林模型过程的一点理解

    这篇文章仅仅是为了帮助自己理解在分布式环境下是如何进行随机森林模型构建的,文章中记录的内容可能不太准确,仅仅是大致上的一个理解. 1.特征切分点统计 不管是连续取值型特征还是离散取值型特征,分裂树结点 ...