【springboot】mongoTemplate增删改查操作

目录

        • 一、代码示例
          • 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 删除

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何批量修改图片名为不同名称

如何批量修改图片名为不同名称&#xff1f;当今社会&#xff0c;因为人们都养成了随手拍照的习惯&#xff0c;所以拥有上千上万张照片的相册已经司空见惯不足为奇。然而&#xff0c;我们在保存这些照片时往往都会碰到一个大难题——电脑中的图片名称千奇百怪&#xff0c;让整个…

STM32 printf函数

printf函数输出流程 用户调用printf()函数到C标准库调用printf函数相关部分&#xff0c;printf函数由编译器提供的stdio.h解析。包含在usart.h文件中。fputc()最终实现输出。用户需要根据最终输出的硬件重新定义该函数&#xff0c;此过程为&#xff1a;printf重定向。 printf的…

WebMagic - 创意前端项目集合(点击链接可在电脑上查看效果)

WebMagic - 创意前端项目集合 欢迎来到 WebMagic 仓库&#xff01;这里汇集了一系列令人惊叹的前端项目&#xff0c;涵盖了HTML5、CSS3和JS等多项技术。无论你是前端开发者、设计师&#xff0c;还是对创意互动内容感兴趣的人&#xff0c;这个仓库都将为你带来无尽的惊喜。 每…

高等数学教材重难点题型总结(三)微分中值定理和导数的应用

第三章&#xff0c;微分中值定理的证明题等&#xff0c;非常重要&#xff0c;需要牢牢掌握 1.证明中值定理对某函数在给定区间上的正确性 2.与中值定理有关的证明题 3.微分中值定理应用于求证不等式 4.洛必达法则求极限 5.洛必达的经典错误反例 6.按某项实现多项式幂展开 7.求带…

【网络】网络层——IP协议

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《网络》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 网络层中&#xff0c;IP协议首部和有效载荷组成的完整数据称为数据报。 IP协议 &#x1f349;TCP和IP的…

重建与突破,探讨全链游戏的现在与未来

全链游戏&#xff08;On-Chain Game&#xff09;是指将游戏内资产通过虚拟货币或 NFT 形式记录上链的游戏类型。除此以外&#xff0c;游戏的状态存储、计算与执行等皆被部署在链上&#xff0c;目的是为用户打造沉浸式、全方位的游戏体验&#xff0c;超越传统游戏玩家被动控制的…

新能源电动车充电桩控制主板安全特点

新能源电动车充电桩控制主板安全特点 你是否曾经担心过充电桩的安全问题?充电桩主板又是什么样的呢?今天我们就来聊聊这个话题。 充电桩主板采用双重安全防护系统&#xff0c;包括防水、防护、防尘等&#xff0c;确保充电桩安全、可靠。不仅如此&#xff0c;充电桩主板采用先…

C# Linq源码分析之Take (一)

概要 在.Net 6 中引入的Take的另一个重载方法&#xff0c;一个基于Range的重载方法。因为该方法中涉及了很多新的概念&#xff0c;所以在分析源码之前&#xff0c;先将这些概念搞清楚。 Take方法基本介绍 public static System.Collections.Generic.IEnumerable Take (this …

mybatis-plus 根据指定字段 批量 删除/修改

mybatis-plus 提供了根据id批量更新和修改的方法,这个大家都不陌生 但是当表没有id的时候怎么办 方案一: 手写SQL方案二: 手动获取SqlSessionTemplate 就是把mybatis plus 干的事自己干了方案三 : 重写 executeBatch 方法结论: mybatis-plus 提供了根据id批量更新和修改的方法,…

【Linux】POSIX信号量和基于环形队列的生产消费者模型

目录 写在前面的话 什么是POSIX信号量 POSIX信号量的使用 基于环形队列的生产消费者模型 写在前面的话 本文章主要先介绍POSIX信号量&#xff0c;以及一些接口的使用&#xff0c;然后再编码设计一个基于环形队列的生产消费者模型来使用这些接口。 讲解POSIX信号量时&#x…

rabbitMQ服务自动停止(已解决

1、 在rabbitmq的sbin目录下操作 rabbitmq-plugins enable rabbitmq_management 2、 自己去rabbitmq_server-3.7.5文件夹下创建一个data&#xff0c;再执行这个命令&#xff08;用自己的目录哈 set RABBITMQ_BASED:\RabbitTools\RabbitMQ\rabbitmq_server-3.7.5\data 然后去配…

执行Lua脚本后一直查询不到Redis中的数据(附带问题详细排查过程,一波三折)

文章目录 执行Lua脚本后一直查询不到Redis中的数据&#xff08;附带详细问题排查过程&#xff0c;一波三折&#xff09;问题背景问题1&#xff1a;Lua脚本无法切库问题2&#xff1a;RedisTemlate切库报错问题3&#xff1a;序列化导致数据不一致问题4&#xff1a;Lua脚本中单引号…

windows系统丢失mfc120u.dll的解决方法

1.mfc120u.dll是什么 mfc120u.dll是Windows操作系统中的一个动态链接库&#xff08;Dynamic Link Library&#xff0c;简称DLL&#xff09;文件。它包含了一些用于运行C程序的函数和其他资源。这个特定的DLL文件是Microsoft Foundation Classes&#xff08;MFC&#xff09;库的…

wireshark界面内容含义

网络分析工具——WireShark的使用&#xff08;超详细&#xff09;_世间繁华梦一出的博客-CSDN博客 wireshark抓包数据&#xff1a;理解与分析_wireshark里面length_ 佚名的博客-CSDN博客

app 自动化测试 - 多设备并发 -appium+pytest+ 多线程

1、appiumpython 实现单设备的 app 自动化测试 启动 appium server&#xff0c;占用端口 4723电脑与一个设备连接&#xff0c;通过 adb devices 获取已连接的设备在 python 代码当中&#xff0c;编写启动参数&#xff0c;通过 pytest 编写测试用例&#xff0c;来进行自动化测试…

python优雅地爬虫!

背景 我需要获得新闻&#xff0c;然后tts&#xff0c;在每天上班的路上可以听一下。具体的方案后期我也会做一次分享。先看我喜欢的万能的老路&#xff1a;获得html内容-> python的工具库解析&#xff0c;获得元素中的内容&#xff0c;完成。 好家伙&#xff0c;我知道我爬…

Data Abstract for .NET and Delphi Crack

Data Abstract for .NET and Delphi Crack .NET和Delphi的数据摘要是一套或RAD工具&#xff0c;用于在.NET、Delphi和Mono中编写多层解决方案。NET和Delphi的数据摘要是一个套件&#xff0c;包括RemObjects.NET和Delphi版本的数据摘要。RemObjects Data Abstract允许您创建访问…

Vue使用jspdf和html2canvas组件库结合导出PDF文件

效果图&#xff1a; 1、安装依赖&#xff1a; npm install html2canvas --save npm install jspdf --save 或 yarn add html2canvas --save yarn add jspdf --save 2、封装全局调用方法&#xff1a;this.$exportPDF(#id,文件名) 新建js文件&#xff1a;/utils/html2Pdf.js&am…

Mysql性能优化:什么是索引下推?

导读 索引下推&#xff08;index condition pushdown &#xff09;简称ICP&#xff0c;在Mysql5.6的版本上推出&#xff0c;用于优化查询。 在不使用ICP的情况下&#xff0c;在使用非主键索引&#xff08;又叫普通索引或者二级索引&#xff09;进行查询时&#xff0c;存储引擎…

QtCreator中设置自定义注释格式

QtCreator--工具--选项--文本编辑器--片段--组:C--添加 在其中添加一个key为&#xff1a;header&#xff0c;value如下图的组合&#xff1a; /*! ProjName : %{CurrentProject:Name}* FileName : %{CurrentDocument:FileName}* Brief : * Details : * Aut…