MongoDB学习笔记【part5】基于 MongoRepository 开发CURD

news2024/11/16 7:41:16

一、MongoRepository

        Spring Data 提供了对 mongodb 数据访问的支持,只需继承 MongoRepository 类,并按照 Spring Data 规范就可以实现对 mongodb 的操作。

SpringData 方法定义规范:

在这里插入图片描述

在这里插入图片描述

注意事项:
  1. 不能随便声明,必须要符合一定的规范
  2. 查询方法以find、read、get开头
  3. 涉及条件查询时,条件的属性用条件关键字连接
  4. 条件属性首字母需要大写
  5. 支持属性的级联查询,但如果当前类有符合条件的属性则优先使用,而不使用级联属性;若需要使用级联属性,则属性之间使用_强制进行连接

准备步骤:

第一步,创建接口,继承 MongoRepository。

创建接口继承 MongoRepository ,并用 @Repository 标识持久层。

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

MongoRepository 其中有两个泛型 <T,TD>,T为仓库保存的bean类,TD为该bean的唯一标识的类型,一般为ObjectId 。

第二步,自动注入MongoRepository。
    @Autowired
    private MongoRepository mongoRepository;

二、实现 CURD

1.添加一个文档
/**
 * 1.添加
 */
@Test
public void createUser() {
    User user = new User();
    user.setName("parker");
    user.setNumber(4);
    user.setPosition("defender");
    User insert_user = (User) mongoRepository.save(user);

    System.out.println(insert_user);
}
2.查询所有
/**
 * 2.查询所有
 */
@Test
public void findAll() {
    List list = userRepository.findAll();
    System.out.println(list);
}
3.通过id查询
/**
 * 3.id查询
 */
@Test
public void findById() {
    User user = (User) userRepository.findById("63cbf57d92912c3d57276510").get();
    System.out.println(user);
}
4.条件查询
/**
 * 4.条件查询
 */
@Test
public void findUserList1() {
    // select * from User where name="parker" and number=7
    //模拟构造条件
    User user = new User();
    user.setNumber(9);
    user.setPosition("striker");
    Example<User> userExample = Example.of(user);
    //查询
    List list = userRepository.findAll(userExample);
    System.out.println(list);

}
5.模糊查询
/**
 * 5.模糊查询
 */
@Test
public void findUserList2() {
    // select * from User where name like "park"
    //创建匹配器,设置查询条件
    ExampleMatcher matcher = ExampleMatcher.matching() //构建匹配器对象
            .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //设置默认字符串匹配方式:模糊查询
            .withIgnoreCase(true); //设置默认大小写忽略方式:true为忽略大小写
    //模拟构造条件
    User user = new User();
    user.setName("park");
    Example<User> userExample = Example.of(user,matcher);
    //查询
    List list = userRepository.findAll(userExample);
    System.out.println(list);

}
6.分页查询
/**
 * 6.分页查询
 */
@Test
public void findUserPage() {
    //构造排序器,设置排序方法
    Sort sort = Sort.by(Sort.Direction.ASC,"number");
    //构造分页器,设置分页参数
    //返回类型建议为Pageable接口,page=0代表第一页
    Pageable pageable = PageRequest.of(0, 5, sort);
    //创建匹配器,设置查询条件
    ExampleMatcher matcher = ExampleMatcher.matching() //构建匹配器对象
            .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //设置默认字符串匹配方式:模糊查询
            .withIgnoreCase(true); //设置默认大小写忽略方式:true为忽略大小写
    //模拟构造条件,不设置属性代表不进行条件匹配
    User user = new User();
    Example<User> userExample = Example.of(user,matcher);
    //查询
    Page<User> page = userRepository.findAll(userExample, pageable);
    System.out.println("总页数为:"+page.getTotalPages());
    System.out.println("查询的该页数据为:"+page.getContent());
}
7.修改

增加和修改都使用的是 save() 方法,save方法会判断传进来的实体对象是否有 _id 值。若无 ID ,则执行增加操作;若已有 ID,则转而去执行更新修改操作。

/**
 * 7.修改
 */
@Test
public void updateUser(){
    User user = (User) userRepository.findById("63cbf57d92912c3d57276510").get();
    user.setNumber(7);
    user.setPosition("striker");
    User update_user = (User) userRepository.save(user);
    System.out.println(update_user);
}
8.删除
/**
 * 8.删除
 */
@Test
public void deleteUser(){
    userRepository.deleteById("63cbf57d92912c3d57276510");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/175393.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汇编语言学习笔记 下

本文承接汇编语言学习笔记 上 上篇文章记录了汇编语言寄存器&#xff0c;汇编语言基本组成部分&#xff0c;数据传送指令&#xff0c;寻址指令&#xff0c;加减法指令&#xff0c;堆栈&#xff0c;过程&#xff0c;条件处理&#xff0c;整数运算的内容 高级过程 大多数现代编程…

day24-网络编程02

1.NIO 1.1 NIO通道客户端【应用】 客户端实现步骤 打开通道指定IP和端口号写出数据释放资源 示例代码 public class NIOClient {public static void main(String[] args) throws IOException {//1.打开通道SocketChannel socketChannel SocketChannel.open();//2.指定IP和端…

你是真的“C”——2023年除夕夜 牛客网刷题经验分享~

2023年除夕夜 牛客网刷题经验分享~&#x1f60e;前言&#x1f64c;BC89 包含数字9的数 &#x1f60a;BC90 小乐乐算多少人被请家长 &#x1f60a;BC91 水仙花数 &#x1f60a;BC92 变种水仙花 &#x1f60a;BC93 公务员面试 &#x1f60a;总结撒花&#x1f49e;&#x1f60e;博…

Android Studio 支持安卓手机投屏

有时当我们在线上做技术分享或者功能演示时&#xff0c;希望共享连接中的手机屏幕&#xff0c;此时我们会求助 ApowerMirror&#xff0c;LetsView&#xff0c;Vysor&#xff0c;Scrcpy 等工具。如果你是一个 Android Developer&#xff0c;那么现在你有了更好的选择。 Android…

Day59| 503. 下一个更大元素 II | 42. 接雨水 --三种方法:1.双指针 2.动态规划 3.单调栈

503. 下一个更大元素 II注意点&#xff1a;初始化了2倍的题目中的nums.size()&#xff0c;最后直接/2即可分清逻辑nums[i] > nums[st.top()]的时候&#xff0c;才进行st.pop()操作class Solution { public:vector<int> nextGreaterElements(vector<int>& nu…

STM32——独立看门狗

目录 看门狗产生背景 看门狗的作用 STM32 独立看门狗 独立看门狗特点 &#xff08;IWDG&#xff09; 独立看门狗常用寄存器 独立看门狗超时时间计算 独立看门狗工作原理 独立看门狗操作库函数 看门狗产生背景 当单片机的工作受到来自外界电磁场的干扰&#xff0c;造…

bert-bilstm-crf提升NER模型效果的方法

1.统一训练监控指标和评估指标评估一个模型的最佳指标是在实体级别计算它的F1值&#xff0c;而不是token级别计算它的的准确率&#xff09;。自定义一个f1值的训练监控指标传给回调函数PreliminaryTP&#xff1a;实际为P&#xff0c;预测为PTN&#xff1a;实际为N&#xff0c;预…

【Java IO流】缓冲流及原理详解

文章目录前言字节缓冲流原理字符缓冲流Java编程基础教程系列前言 前面我们已经学习了四种对文件数据操作的基本流&#xff0c;字节输入流&#xff0c;字节输出流&#xff0c;字符输入流&#xff0c;字符输出流。为了提高其数据的读写效率&#xff0c;Java中又定义了四种缓冲流…

LwIP系列--内存管理(堆内存)详解

一、目的小型嵌入式系统中的内存资源&#xff08;SRAM&#xff09;一般都比较有限&#xff0c;LwIP的运行平台一般都是资源受限的MCU。基于此为了能够更加高效的运行&#xff0c;LwIP设计了基于内存池、内存堆的内存管理以及在处理数据包时的pbuf数据结构。本篇的主要目的是介绍…

Ubuntu22.10安装和配置R/FSL/Freesurfer

2018年购入的台式机&#xff0c;一直处于吃灰状态&#xff0c;决定安装Ubuntu方便学习和使用一些基于Linux系统的软件。本文记录相关软件的安装和配置。>安装Ubuntu22.10<到官网下载ISO文件。将一个闲置U盘通过Rufus制作为安装盘。重启按F11设置引导盘&#xff0c;选择U盘…

国家实用新型发明专利:一种机器视觉的流水线智能检测报警系统

国家实用新型发明专利&#xff1a;一种机器视觉的流水线智能检测报警系统 【系统装置设计图】 文章目录国家实用新型发明专利&#xff1a;一种机器视觉的流水线智能检测报警系统【说明书摘要】【权利要求书】【说明书】***技术领域******背景技术******发明内容******有益效果…

C++类和对象(上): 封装与this指针

目录 一.前言 二. 类的引入和定义 1.C和C结构体的区别 2.C类的定义 3.类的成员方法的声明和定义是可分离的 三.面向对象之封装特性 1.封装思想的介绍 2.类封装编程模式的优点 四. 类实例(对象)的内存模型 五.this指针 章节导图&#xff1a; 一.前言 面向过程和面向对…

分享167个PHP源码,总有一款适合您

PHP源码 分享167个PHP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 167个PHP源码下载链接&#xff1a;https://pan.baidu.com/s/1fzoQ4_4VXc1e1ZHOUKuhbQ?pwdsb6s 提取码&#x…

数学表达式的处理

概述 在OJ上 会遇到一些这样的题目&#xff1a; 小明同学写数学四则运算&#xff0c;有把括号写多、写少、写错的情况&#xff0c;比如&#xff08;AB)*(C-D &#xff0c;请你输入一个表达式&#xff0c;判断此表达式的括号是否正确(不考虑运算的结果正确性)。 每次我看到 &q…

【操作系统】—— Windows压缩工具 “ Bandizip与7-zip ”(带你快速了解)

&#x1f4dc; “作者 久绊A” 专注记录自己所整理的Java、web、sql等&#xff0c;IT技术干货、学习经验、面试资料、刷题记录&#xff0c;以及遇到的问题和解决方案&#xff0c;记录自己成长的点滴。 &#x1f341; 操作系统【带你快速了解】对于电脑来说&#xff0c;如果说…

Python OpenCV 图片滑块验证码 滑块图片验证码 自动识别方案 模板匹配识别 识别成功率调试 源码分析 通用解决方案

前言 通过本专栏前面两篇文章大家已对图片滑块验证码有了初步的了解,对于滑块验证的实现和校验原理有了一定的了解,通过由浅入深的实战案例可直接应用于实战,对于滑块如何在前端实现滑动或接口调用可自行查阅相关资料实现,本文主要讲解 滑块验证码 模板匹配 识别的通用解决…

史上最详细的AVL树的实现(万字+动图讲解旋转)

&#x1f525;&#x1f525; 欢迎来到小林的博客&#xff01;&#xff01;       &#x1f6f0;️博客主页&#xff1a;✈️小林爱敲代码       &#x1f6f0;️文章专栏&#xff1a;✈️小林的C之路       &#x1f6f0;️欢迎关注&#xff1a;&#x1f44d…

[Python从零到壹] 六十三.图像识别及经典案例篇之图像漫水填充分割应用

祝大家新年快乐&#xff0c;阖家幸福&#xff0c;健康快乐&#xff01; 欢迎大家来到“Python从零到壹”&#xff0c;在这里我将分享约200篇Python系列文章&#xff0c;带大家一起去学习和玩耍&#xff0c;看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲…

创建者模式-原型模式

1.概述 用一个已经创建的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型对象相同的新对象 2.结构 原型模式包含如下角色&#xff1a; 抽象原型类&#xff1a;规定了具体原型对象必须实现的的 clone() 方法。具体原型类&#xff1a;实现抽象原型类的 clone() …

Spring AOP与Spring 事务

一、AOP讲解 创建普通对象UserService Component public class UserService{Autowiredprivate OrderService orderService;public void test(){System.out.println(orderService);}}创建代理对象UserServiceProxy&#xff0c;对test&#xff08;&#xff09;方法进行切面编程…