Springboot 整合 MongoDB

这节我们将整合 Spring Boot 与 Mongo DB 实现增删改查的功能,并且实现序列递增。

Mongo DB 的基本介绍和增删改查的用法可以参考我之前的文章:MongoDB 的安装和基本操作

新建一个 Spring Boot 项目,版本为 2.3.7.RELEASE,并引入如下依赖:

 <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

然后可以通过 Mongo Shell 或者 Navicat 工具创建一个名称为 test 的数据库,并新增 user 文档(文档,类似与关系型数据库里的数据表):navicat 破解

在配置文件中配置 mongo 的连接信息:

spring:
data:
mongodb:
host: localhost #地址
port: 27017 #端口号
database: test #数据库名

Mongo DB 的默认端口为 27017,使用的数据库为刚刚创建的 test。

创建 User 实体类:

@Document("User")表示这是文档对象,名称为 User,对应 Mongo DB 里的 User 集合。@Id标注主键字段,String 类型的主键值在插入的时候 Mongo DB 会帮我们自动生成。如果对象中的某个属性为非表字段,可以使用注解@Transient进行排除。

@Data
@Document("User")
public class User {
@Id
private String id;
private String name;
private Integer age;
}

MongoRepository

简单增删改查

创建一个 UserDao 接口:

@Repository
public interface UserDao extends MongoRepository<User, String> {
}

接口继承自MongoRepository,泛型分别为实体对象和主键类型。通过继承MongoRepositoryUserDao包含了一些增删改查的方法,如下图所示:

为了方便演示,接下来直接去到测试类进行测试:

记得注入 UserDao

import look.word.mongo.bean.User;
import look.word.mongo.dao.UserDao;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest; import javax.annotation.Resource;
import java.util.List; @SpringBootTest
class MongoDaoTest { @Resource
private UserDao userDao; /**
* 新增和修改都是 save方法,
* id 存在为修改,id 不存在为新增
*/
@Test
void save() {
User user = new User();
user.setName("张三");
user.setAge(18);
System.out.println(userDao.save(user));
userDao.save(user);
} /**
* 删除
*/
@Test
void remove(){
userDao.deleteById("62c155be562fb86d5bcce2d0");
} /**
* 查询所有
*/
@Test
void findAll(){
List<User> users = userDao.findAll();
users.stream().forEach(user -> System.out.println(user));
} }

上面我们编写了基本的增删改查样例,新增和修改都是通过save方法完成的,当主键存在时则为修改,主键不存在则为新增。

测试新增用户:

这里没有传入 id 做的是新增

新增成功后 会返回当前插入的文档对象

测试删除用户:

删除成功后 没有任何信息的提示 这里演示的是根据 id 去删除

测试修改用户:

  • 可以看到 根据 id 修改时 会把我们不需要修改的值修改成 null 了 因为我们没有传入 如何避免呢?
  • 可以先根据 id 查询出文档信息 然后在修改需要修改的字段即可。

测试查询用户:

多条件查询:

Spring Data 提供了对 mongodb 数据访问的支持,我们只需要继承 MongoRepository 类,按照 Spring Data 规范就可以了

SpringData 方法定义规范

规则:

1、不是随便声明的,而需要符合一定的规范

2、 查询方法以 find | read | get 开头

3、 涉及条件查询时,条件的属性用条件关键字连接

4、 要注意的是:条件属性首字母需要大写

5、 支持属性的级联查询,但若当前类有符合条件的属性则优先使用,而不使用级联属性,若需要使用级联属性,则属性之间使用_强制进行连接

比如通过用户的年龄段来查询:

注意: 方法参数个数需要和方法名中所需要的参数个数对应上。

@Repository
public interface UserDao extends MongoRepository<User, String> { /**
* 根据年龄段来查找
*
* @param from from
* @param to to
* @return List<User>
*/
List<User> findByAgeBetween(Integer from, Integer to);
}

在输入findBy后,IDEA 会根据实体对象的属性和 SQL 的各种关键字自动组合提示:

排序与分页:

增删改查可以用MongoTemplate也可以实现

排序和分页需要使用MongoTemplate对象来完成,在UserService里新增一个getUserByCondition方法:

    @Resource
private MongoTemplate mongoTemplate; @Test
void getUserByCondition(){
// 查询条件对象
Query query = new Query();
Criteria criteria = new Criteria();
Sort sort = Sort.by(Sort.Direction.DESC, "age");
//查询第一页 每页1条 按照年龄升序
Pageable pageable = PageRequest.of(0, 10, sort);
// 模糊查询
criteria.and("name").regex("三");
// 把查询规则加入 查询对象中
query.addCriteria(criteria);
List<User> users = mongoTemplate.find(query.with(pageable), User.class);
System.out.println(users);
}

Springboot 整合 MongoDB的更多相关文章

  1. java操作mongodb & springboot整合mongodb

    简单的研究原生API操作MongoDB以及封装的工具类操作,最后也会研究整合spring之后作为dao层的完整的操作. 1.原生的API操作 pom.xml <!-- https://mvnre ...

  2. SpringBoot整合mongoDB

    MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 这一片文章介绍一个springboot整合mongodb,如果你了解整合mysql之类的 ...

  3. SpringBoot 整合mongoDB并自定义连接池

    SpringBoot 整合mongoDB并自定义连接池 得力于SpringBoot的特性,整合mongoDB是很容易的,我们整合mongoDB的目的就是想用它给我们提供的mongoTemplate,它 ...

  4. Springboot整合MongoDB的Docker开发,其它应用也类似

    1 前言 Docker是容器开发的事实标准,而Springboot是Java微服务常用框架,二者必然是会走到一起的.本文将讲解如何开发Springboot项目,把它做成Docker镜像,并运行起来. ...

  5. 8、SpringBoot整合之SpringBoot整合MongoDB

    SpringBoot整合MongoDB 一.创建项目,选择依赖 仅选择Spring Web.Spring Data MongoDB即可 二.引入相关依赖(非必要) 这里只是为了实体类的创建方便而引入l ...

  6. SpringBoot 整合 MongoDB 实战介绍

    一.介绍 在前面的文章中,我们详细的介绍了 MongoDB 的配置和使用,如果你对 MongoDB 还不是很了解,也没关系,在 MongoDB 中有三个比较重要的名词:数据库.集合.文档! 数据库(D ...

  7. SpringBoot非官方教程 | 第八篇:springboot整合mongodb

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot8-mongodb/ 本文出自方志朋的博客 这篇文 ...

  8. 实例讲解Springboot整合MongoDB进行CRUD操作的两种方式

    1 简介 Springboot是最简单的使用Spring的方式,而MongoDB是最流行的NoSQL数据库.两者在分布式.微服务架构中使用率极高,本文将用实例介绍如何在Springboot中整合Mon ...

  9. Springboot整合MongoDB(Eclipse版本)

    IDEA版本其实也差不多的,大同小异 简单Demo地址: https://blog.csdn.net/shirukai/article/details/82152243 Springboot项目整合M ...

随机推荐

  1. UnrealEngine创建自定义资产类型

    导语 这篇文章记录了将UObject实例保存在Asset文件的方法,用这个方法可以将自定义的UObject数据序列化保存到文件,可以用于自定义UE资源类型. 创建UObject类 这一步比较简单,按照 ...

  2. python基础练习题(题目 斐波那契数列II)

    day16 --------------------------------------------------------------- 实例024:斐波那契数列II 题目 有一分数序列:2/1,3 ...

  3. 分布式任务调度平台XXL-JOB安装及使用

    一.为什么需要任务调度平台 在Java中,传统的定时任务实现方案,比如Timer,Quartz等都或多或少存在一些问题: 不支持集群.不支持统计.没有管理平台.没有失败报警.没有监控等等而且在现在分布 ...

  4. Java基础语法Day_05(数组的概念)

    第14节 数组         day05_01_数组的概念 day05_02_数组的定义格式一_动态初始化 day05_03_数组的定义格式二_静态初始化 day05_04_数组的定义格式三_省略的 ...

  5. 给swap分区扩容

    一.先添加一块硬盘,如果硬盘空间还有没有被分区的也可以使用,再创建一个分区(分区可以是主分区或者扩展的逻辑分区) fdisk  /dev/sdb n        代表创建分区 p        代表 ...

  6. 【kubernetes 问题排查】使用 kubeadm 部署时遇到的问题

    引言 再使用kubeadm部署集群时会多少遇到一些问题,这里做下记录,方便后面查找问题时有方向,同时也为刚要入坑的你指明下方向,让你少走点弯路 问题汇总 The connection to the s ...

  7. 【总结】2022GDOI普及组试题与题解(缺两天的T4)

    标签 2022 广东省选普及组 GDOI 试题 前往Luogu下载 Luogu下载:This Day1题解 T1 邹忌讽齐王纳谏 打卡题,建议模拟 建议使用map,时间复杂度为\(O(nlogn)\) ...

  8. 2021春季学期华清大学EE数算OJ3:岩石的重量

    原题目如下: 看起来,这不过是我们在<程序设计基础>里面接触过的简单动态规划问题(什么,你不知道什么叫动态规划? 什么是动态规划? 百度百科对"动态规划"一词定义如下: ...

  9. 992. Sort Array By Parity II - LeetCode

    Question 992. Sort Array By Parity II Solution 题目大意:给一个int数组,一半是奇数一半是偶数,分别对偶数数和奇数数排序并要求这个数本身是偶数要放在偶数 ...

  10. 用 notion 管理信用卡与花呗

    用 notion 管理信用卡与花呗 Notion原文,排版更佳 概述 不需要提醒功能和安卓用户可以忽略Scriptable和快捷指令 app的设置 Notion 建立信用卡表格,录入信用卡基本信息,自 ...