【springboot】mongoTemplate增删改查操作

news2025/1/19 11:19:42

目录

        • 一、代码示例
          • 1.1 pom依赖
          • 1.2 application配置
          • 1.3 controller
          • 1.4 service
        • 二、截图示例
          • 2.1 新增
          • 2.2 修改
          • 2.3 详情
          • 2.4 分页
          • 2.5 删除

一、代码示例

1.1 pom依赖
<!-- mongodb -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

1.2 application配置
spring:
  data:
    mongodb:
      uri: mongodb://127.0.0.1/learning
1.3 controller
package com.learning.mongodb.controller;

import com.learning.mongodb.entity.Page;
import com.learning.mongodb.entity.PageQuery;
import com.learning.mongodb.entity.Student;
import com.learning.mongodb.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @Description 接口类
 */
@RequestMapping("student")
@RestController
public class StudentController {

    @Autowired
    private StudentService studentService;

    @GetMapping("/{id}")
    @ResponseBody
    public Student getById(@PathVariable String id){
        return studentService.getById(id);
    }

    @PostMapping("/save")
    @ResponseBody
    public Student save(@RequestBody Student student){
        return studentService.save(student);
    }

    @DeleteMapping("/{id}")
    public long remove(@PathVariable String id){
        return studentService.remove(id);
    }

    @PutMapping("/update")
    public Student update(@RequestBody Student student){
        return studentService.update(student);
    }

    @GetMapping("/page")
    public Page<Student> page(Student student, PageQuery query) {
        return studentService.page(student, query);
    }
}

1.4 service
package com.learning.mongodb.service.impl;

import com.learning.mongodb.entity.Page;
import com.learning.mongodb.entity.PageQuery;
import com.learning.mongodb.entity.Student;
import com.learning.mongodb.service.StudentService;
import com.mongodb.BasicDBObject;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service;

import java.util.*;

@Service
public class StudentServiceImpl implements StudentService {

    public static String COLLECTION_NAME = "school";

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 根据id检索
     * @param id
     * @return
     */
    @Override
    public Student getById(String id) {
        Query query = new Query(Criteria.where("id").is(id));
        Student student = mongoTemplate.findOne(query, Student.class, COLLECTION_NAME);
        return student;
    }

    @Override
    public Student save(Student student) {
        // 判断collection是否存在
        if(mongoTemplate.collectionExists(COLLECTION_NAME)){
            // 保存数据
            return mongoTemplate.insert(student, COLLECTION_NAME);
        }else{
            // 创建collection
            BasicDBObject index = new BasicDBObject();
            index.put("id", 1);
            mongoTemplate.createCollection(COLLECTION_NAME).createIndex(index);
            // 保存数据
            return mongoTemplate.insert(student, COLLECTION_NAME);
        }
    }

    @Override
    public long remove(String id) {
        Query query = Query.query(Criteria.where("_id").is(id));
        DeleteResult result = mongoTemplate.remove(query, COLLECTION_NAME);
        return result.getDeletedCount();
    }

    @Override
    public Student update(Student student) {
        Query query = new Query(Criteria.where("_id").is(student.getId()));
        Student one = mongoTemplate.findOne(query, Student.class, COLLECTION_NAME);
        if(one != null){
            Update update = new Update();
            update.set("age", student.getAge());
            update.set("name", student.getName());
            UpdateResult updateResult = mongoTemplate.updateFirst(query, update, COLLECTION_NAME);
            long modifiedCount = updateResult.getModifiedCount();
            if(modifiedCount>0){
                return student;
            }
        }
        return null;
    }

    public long updateBatch(List<String> ids) {
        Update update = new Update();
        update.set("updateTime", new Date());
        update.set("deleted", 1);
        Query query = new Query(Criteria.where("_id").in(ids));
        UpdateResult updateResult = mongoTemplate.updateMulti(query, update, COLLECTION_NAME);
        return updateResult.getModifiedCount();
    }

    private List<Student> list(Student student) {
        Criteria criteria = new Criteria();
        if(student.getAge() != null){
            criteria.and("age").is(student.getAge());
        }
        if(student.getName() != null){
            // 模糊查询
            criteria.and("name").regex(student.getName());
        }
        Query query = new Query(criteria);
        return mongoTemplate.find(query, Student.class, COLLECTION_NAME);
    }

    @Override
    public Page<Student> page(Student student, PageQuery pageQuery) {
        // 查询总数
        long count = this.count(student);
        Page<Student> page = new Page<>();
        page.setTotal(count);
        page.setSize(pageQuery.getSize());
        page.setCurrent(pageQuery.getCurrent());
        if(count > 0){
            List<Student> dataList = this.getPage(student, pageQuery);
            page.setRecords(dataList);
        }
        return page;
    }

    private List<Student> getPage(Student student, PageQuery pageQuery) {
        Query query = getQuery(student);
        if(query != null){
            query.with(PageRequest.of(pageQuery.getCurrent() - 1, pageQuery.getSize()));
        }
        return mongoTemplate.find(query, Student.class, COLLECTION_NAME);
    }

    private Query getQuery(Student student) {
        Criteria criteria = new Criteria();
        if(student.getAge() != null){
            criteria.and("age").is(student.getAge());
        }
        if(student.getName() != null){
            // 模糊查询
            criteria.and("name").regex(student.getName());
        }
        Query query = new Query();
        query.addCriteria(criteria);
        Sort sort = Sort.by(Sort.Order.asc("id"));
        query.with(sort);
        return query;
    }

    private long count(Student student) {
        Query query = this.getQuery(student);
        return mongoTemplate.count(query, COLLECTION_NAME);
    }
    
//    private Query andOr(Student student) {
//        Criteria criteria = new Criteria();
//        criteria.and("age").is(student.getAge());
//
//        Query query = new Query();
//        List<Criteria> list = new ArrayList<>();
//        list.add(criteria);
//
//        Criteria keyWordCriteria = new Criteria().orOperator(
//                Criteria.where("name").regex(student.getName()),
//                Criteria.where("description").regex(student.getDescription())
//        );
//        list.add(keyWordCriteria);
//        Criteria result = new Criteria().andOperator(list);
//        query.addCriteria(result);
//        Sort sort = Sort.by(Sort.Order.asc("id"));
//        query.with(sort);
//        return query;
//    }
}

二、截图示例

2.1 新增

在这里插入图片描述
在这里插入图片描述

2.2 修改

在这里插入图片描述
在这里插入图片描述

2.3 详情

在这里插入图片描述

2.4 分页

在这里插入图片描述
在这里插入图片描述

2.5 删除

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

2023 年 4 款适用于安卓手机的最佳 PDF 转 Word 转换器

尝试在 Android 上将 PDF 文档转换为 Word 文件&#xff1f;好吧&#xff0c;您可能会发现要让它发挥作用几乎是不可能的&#xff0c;至少在没有任何额外工具的情况下是这样。Web 上有用于此类转换的选项&#xff0c;但本地不一定会发生任何情况&#xff08;可能除了一个应用程…

金融语言模型:FinGPT

项目简介 FinGPT是一个开源的金融语言模型&#xff08;LLMs&#xff09;&#xff0c;由FinNLP项目提供。这个项目让对金融领域的自然语言处理&#xff08;NLP&#xff09;感兴趣的人们有了一个可以自由尝试的平台&#xff0c;并提供了一个与专有模型相比更容易获取的金融数据。…

axios / fetch 实现 stream 流式请求

axios 是一个支持node端和浏览器端的易用、简洁且高效的http库。本文主要介绍 axios 如何实现 stream 流式请求&#xff0c;注意这里需要区分 node 环境和浏览器环境。 一、node端 代码演示&#xff1a; const axios require(axios);axios({method: get,url: http://tiven.c…

intern()的使用和理解

如果不是用双引号声明的String对象&#xff0c;可以使用String提供的intern方法&#xff1a;intern方法会从字符串常量池中查询当前字符串是否存在&#xff0c;若不存在就会将当前字符串放入常量池中。比如&#xff1a;String myinfo new String&#xff08;"I Love CSDN…

网络安全--负载均衡

负载均衡 webshell实践 一、负载均衡配置 1.在全局的http下写下它&#xff1a; upstream nginx_boot{# 30s内检查心跳发送两次包&#xff0c;未回复就代表该机器宕机&#xff0c;请求分发权重比为1:2server 192.168.0.000:8080 weight100 max_fails2 fail_timeout30s; ser…

ARM64 程序调用标准

ARM64 程序调用标准 1 Machine Registers1.1 General-purpose Registers1.2 SIMD and Floating-Point Registers 2 Processes, Memory and the Stack2.1 Memory Addresses2.2 The Stack2.2.1 Universal stack constraints2.2.2 Stack constraints at a public interface 2.3 Th…

堆 和 优先级队列(超详细讲解,就怕你学不会)

优先级队列 一、堆的概念特性二、堆的创建1、向下调整算法2、向下调整建堆3、向下调整建堆的时间复杂度 三、堆的插入1、向上调整算法实现插入2、插入创建堆的时间复杂度 三、堆的删除四、Java集合中的优先级队列1、PriorityQueue 接口概述及模拟实现2、如何创建大根堆&#xf…

基于YOLOv8模型的五类动物目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型的五类动物目标检测系统可用于日常生活中检测与定位动物目标&#xff08;狼、鹿、猪、兔和浣熊&#xff09;&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与…

【Java 动态数据统计图】动态数据统计思路案例(动态,排序,数组)四(116)

需求&#xff1a;&#xff1a;前端根据后端的返回数据&#xff1a;画统计图&#xff1b; 1.动态获取地域数据以及数据中的平均值&#xff0c;按照平均值降序排序&#xff1b; 说明&#xff1a; X轴是动态的&#xff0c;有对应区域数据则展示&#xff1b; X轴 区域数据降序排序…

加速出海丨美格智能SLM320模组再获德国电信认证

近日&#xff0c;美格智能Cat.1模组SLM320再获国际顶尖运营商德国电信认证&#xff0c;可以支持客户在德国电信网络所覆盖的德国、荷兰、波兰、奥地利、捷克、斯洛伐克、匈牙利等欧洲多国市场部署物联网应用&#xff0c;是美格智能走向全球市场的又一重要突破。 日前&#xff0…

通达信指标:显示全部的DRAWICON函数图标

**指标使用说明&#xff1a;**指标名称&#xff08;DRAWICON图标&#xff0c;幅图显示&#xff09;&#xff0c;需要查看图标的时候&#xff0c;要选择上市天数>92天的股票&#xff0c;才能正常的显示全部的图标&#xff0c;否则是无法显示的&#xff0c;以下的写法也是指标…

客服如何减轻工作压力?浅析客服压力管理方法

在现代商业领域中&#xff0c;客服是一项非常重要的工作&#xff0c;负责根据客户需求提供解决方案。客服工作不仅需要一定的专业知识和技能&#xff0c;还需要面对各种复杂、多变的情况&#xff0c;并拥有强大的应对压力的能力。客服从业人员的工作压力往往非常大&#xff0c;…

C++初阶语法——内部类

前言&#xff1a;内部类&#xff0c;顾名思义是定义在类中的类&#xff0c;许多人会以为它属于外部的类&#xff0c;实际上并不是&#xff0c;它们是两个独立的类&#xff0c;但是内部类受外部类类域的限制。 目录 一.概念二.特性1.内部类和外部类相互独立2.内部类是外部类的友…

极客时间-茹炳晟《软件测试52讲》-学习笔记-

测试基础知识篇&#xff08;11讲&#xff09; 01 你真的懂测试吗&#xff1f;从“用户登录”测试谈起 测试用例设计框架 基于功能性需求和非功能性需求思考&#xff1a; 功能性需求使用等价类划分、边界值分析、错误推断法设计用例 非功能性需求考虑安全&#xff08;信息的保存…

《Java极简设计模式》第04章:建造者模式(Builder)

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 源码地址&#xff1a;https://github.com/binghe001/java-simple-design-patterns/tree/master/j…

星际争霸之小霸王之小蜜蜂(三)--重构模块

目录 前言 一、为什么要重构模块 二、创建game_functions 三、创建update_screen() 四、修改alien_invasion模块 五、课后思考 总结 前言 前两天我们已经成功创建了窗口&#xff0c;并将小蜜蜂放在窗口的最下方中间位置&#xff0c;本来以为今天将学习控制小蜜蜂&#xff0c;结…

基于IMX6ULLmini的Linux裸机开发系列三:按键检测输入

目录 开启GPIO5对应的时钟 设置引脚复用 设置GPIO5_IO1输入模式 设置检测电平 部分代码 button.c led.c main.c 在原理图上找到对应的引脚后即可以根据对应的图表找到真正在板字上的引脚&#xff0c;这里的 SNVS_TAMPER1对应实际的引脚是GPIO5_IO1 P1357页附近有GPIO5对…

华为OD机试 - 数字字符串组合倒序 - 正则表达式(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路1、熟读题意&#xff0c;大概理解为&#xff1a;2、我理解 “-”作为连接符使用时作为字符串的一部分 的意思是&#xff1a;3、解决本题的关键是正则表达式的使用。 五、Java算法源码六、效果展示1、输入2、输出…

142页大型制造企业IT蓝图、信息化系统技术架构规划与实施方案PPT

导读&#xff1a;原文《142页大型制造企业IT蓝图、信息化系统技术架构规划与实施方案PPT》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 完整版领取方式 完整版领取…

新能源电动车充电桩控制主板的三大保护功能

新能源电动车充电桩控制主板的三大保护功能 你是否曾经遇到过电动车充电时电流过大&#xff0c;电压不稳定&#xff0c;或者电池过热的情况?这些问题都可能会给你的电动车带来安全隐患。那么&#xff0c;如何避免这些问题的发生呢?让我们一起来探讨一下充电桩控制主板的保护功…