mybatisplus 集成逻辑删除
一开始,没去查资料,后面要被AI气死了,先看它的的话
一开始,看ai的描述,我还以为,不需要改数据库,mybatis-puls自动拦截集成就可以实现逻辑删除,c,最后还是要给数据库加一个标志位。
ALTER TABLE bird_andconfidence ADD COLUMN deleted INT DEFAULT 0;
运行向数据库插入一个字段deleted
步骤 1: 配置全局逻辑删除属性
mybatis-plus:global-config:db-config:logic-delete-field: deleted # 指定全局逻辑删除字段名logic-delete-value: 1 # 逻辑已删除值logic-not-delete-value:0
2.逻辑删除标准为加@TableLogic
就好了,在删除时会变为修改,将deleted字段变为1
查询时,会带上条件 AND where deleted =0;
给出我今天写的接口:
public ResponseEntity<?> selectAllBirdsInday(@RequestParam("date") String date) {log.info("查询 {} 的所有鸟类检测结果", date);try {// 手动将 String 类型的 date 参数转换为 LocalDate 类型DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");LocalDate localDate = LocalDate.parse(date, formatter);List<DetectionResultVO> results = birdSelectService.SelectBirdByDate(localDate);if (results == null || results.isEmpty()) {log.info("{} 没有检测到鸟类", date);// 返回包含提示信息的 JSON 对象,并使用 200 OK 状态码Map<String, String> response = Collections.singletonMap("message", "当天没有检测到鸟类");return ResponseEntity.ok(response); // 200 OK}log.info("查询到 {} 个鸟类检测结果", results.size());return ResponseEntity.ok(results); // 200 OK, 返回检测结果列表} catch (DateTimeParseException e) {log.error("日期格式转换失败", e);return ResponseEntity.badRequest().body("日期格式不正确,请使用 yyyy-MM-dd 格式"); // 400 Bad Request} catch (Exception e) {log.error("查询鸟类检测结果失败", e);return ResponseEntity.internalServerError().body("查询失败,请稍后重试"); // 500 Internal Server Error} }
public List<DetectionResultVO> SelectBirdByDate(LocalDate date) {try {// 1. 构造查询时间范围LocalDateTime startOfDay = date.atStartOfDay();LocalDateTime endOfDay = date.atTime(LocalTime.MAX);// 2. 使用 Mybatis-Plus 的 QueryWrapper 构建查询条件QueryWrapper<DetectionResult> queryWrapper = new QueryWrapper<>();queryWrapper.between("creat_time", startOfDay, endOfDay);// 3. 查询 DetectionResult 列表List<DetectionResult> detectionResults = detectionResultMapper.selectList(queryWrapper);if (detectionResults == null || detectionResults.isEmpty()) {log.info("{} 没有检测到鸟类", date);return null; // 或者返回 Collections.emptyList();}// 1. 获取所有 detectionResults 的 ID 列表List<Integer> detectionResultIds = detectionResults.stream().map(DetectionResult::getId).collect(Collectors.toList());// 2. 使用 IN 语句查询 BirdAndconfidence 列表QueryWrapper<BirdAndconfidence> birdQueryWrapper = new QueryWrapper<>();birdQueryWrapper.in("detection_results_id", detectionResultIds);List<BirdAndconfidence> allBirdAndConfidences = birdAndconfidenceMapper.selectList(birdQueryWrapper);// 3. 将查询结果按照 detection_results_id 进行分组Map<Integer, List<BirdAndconfidence>> birdMap = allBirdAndConfidences.stream().collect(Collectors.groupingBy(BirdAndconfidence::getDetectionResultsId));List<DetectionResultVO> detectionResultVOS = new ArrayList<>();// 查询相应的多个识别结果for (DetectionResult detectionResult : detectionResults) {int detectionResultsId = detectionResult.getId();// 4. 从分组结果中获取对应的 BirdAndconfidence 列表List<BirdAndconfidence> birdAndConfidences = birdMap.getOrDefault(detectionResultsId, new ArrayList<>());DetectionResultVO detectionResultVO = new DetectionResultVO();BeanUtils.copyProperties(detectionResult, detectionResultVO);detectionResultVO.setResults(birdAndConfidences);detectionResultVOS.add(detectionResultVO);}if (detectionResultVOS == null || detectionResultVOS.isEmpty()) {log.info("{} 没有检测到鸟类", date);return null; // 或者返回 Collections.emptyList();}log.info("查询到 {} 条鸟类检测结果", detectionResultVOS.size());return detectionResultVOS;} catch (Exception e) {log.error("查询鸟类检测结果失败", e);return null; // 或者抛出异常,取决于你的业务需求}}
中途,ai给出了一个优化,批量查询 BirdAndconfidence
列表: 为了避免 N+1 查询问题,可以使用 IN
语句批量查询
使用 for
循环遍历 detectionResults
列表,并在循环中查询 BirdAndconfidence
列表。 这种方式会导致 N+1 查询问题,即每次循环都需要执行一次数据库查询。 如果 detectionResults
列表中的数据量很大,会导致大量的数据库查询,影响性能。
原本
优化后
使用in,先将所有在这天的鸟类识别结果查出,把对应的分组放在程序中,有效减少数据库连接
相关文章:

mybatisplus 集成逻辑删除
一开始,没去查资料,后面要被AI气死了,先看它的的话 一开始,看ai的描述,我还以为,不需要改数据库,mybatis-puls自动拦截集成就可以实现逻辑删除,c,最后还是要给数据库加一…...
typedef unsigned short uint16_t; typedef unsigned int uint32_t;
你提到的这两行是 C/C 中的类型别名定义: typedef unsigned short uint16_t; typedef unsigned int uint32_t;它们的目的是让代码更具可读性和可移植性,尤其在处理精确位数的整数时非常有用。 ✅ 含义解释 typedef unsigned short uint16_t;…...

SimScape物理建模实例2--带控制的单质量弹簧阻尼系统
模型下载: 基于simscape,单质量系统带位置控制资源-CSDN文库 在实例1中,我们搭建了不带控制的单质量弹簧阻尼系统,该系统没有外界力量介入,只有弹簧的初始弹力,带着弹簧使劲弹来弹去。 SimScape物理建模实…...

PyGame游戏开发(含源码+演示视频+开结题报告+设计文档)
前言: 大二小学期python课上基于pygame做的一个游戏小demo,当时老师花了一天讲解了下python基础语法后(也是整个大学四年唯一学习python的时间),便让我们自学网课一周然后交项目,所以做的非常仓促ÿ…...

拒绝flash插件打劫!如何在vscode上玩4399小游戏
现在电脑上玩4399都需要flash插件了 这也导致了很多人无法玩到小时候的游戏 今天介绍一款插件 功能强大 即安即玩 首先打开vscode 点开小方框(拓展)搜索4399 认准4399 on vscode点击安装 安装完毕后 按下 Ctrl Shift P , 输入 4399 on VSCode 或…...
五大静态博客框架对比:Hugo、Hexo、VuePress、MkDocs、Jekyll
目录 1. Hugo概述优点缺点适用场景使用体验 2. Hexo概述优点缺点适用场景使用体验 3. VuePress概述优点缺点适用场景使用体验 4. MkDocs概述优点缺点适用场景使用体验 5. Jekyll概述优点缺点适用场景使用体验 框架对比总结如何选择?结语 静态博客框架通过将内容&…...

learning ray之ray核心设计和架构
我们每天都在处理海量、多样且高速生成的数据,这对计算能力提出了前所未有的挑战。传统的单机计算模式在面对日益复杂的机器学习模型和大规模数据集时,往往显得力不从心。更重要的是,数据科学家们本应专注于模型训练、特征工程、超参数调优这…...

C语言while循环的用法(非常详细,附带实例)
while 是 C 语言中的一种循环控制结构,用于在特定条件为真时重复执行一段代码。 while 循环的语法如下: while (条件表达式) { // 循环体:条件为真时执行的代码 } 条件表达式:返回真(非 0)或假&#x…...

JavaScript进阶(九)
第三部分:JavaScript进阶 目录 第三部分:JavaScript进阶 一、作用域 1.1 局部作用域 1. 作用域 2. 局部作用域 函数作用域 块作用域 1.2 全局作用域 1.3 作用域链 1.4 JS垃圾回收机制 1. 什么是垃圾回收机制 2. 内存的声明周期 3. 垃圾回收的算法说明 引用计数…...

数据结构与算法分析实验11 实现顺序查找表
实现顺序查找表 1.上机名称2.上机要求3.上机环境4.程序清单(写明运行结果及结果分析)4.1 程序清单4.1.1 头文件4.1.2 实现文件4.1.3 源文件 4.2 实现展效果示 上机体会 1.上机名称 实现顺序查找表 顺序查找表的基本概念 顺序查找表是一种线性数据结构,通常用于存储…...

获取高德地图JS API的安全密钥和Key的方法
要使用高德地图JavaScript API,您需要获取API Key和安全密钥(securityJsCode)。以下是获取步骤: 1. 注册高德开放平台账号 首先访问高德开放平台,如果没有账号需要先注册。 2. 创建应用获取Key 登录后进入"控制台" 点击"应…...
Excel表的导入与导出
Excel表的导入与导出 根据excel表来建立所需的数据库表格 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>4.0.3</version></dependency>导入easyexcel依赖项 阿里巴巴的 EasyExcel …...

JAVA研发+前后端分离,ZKmall开源商城B2C商城如何保障系统性能?
在电商行业竞争白热化的当下,B2C 商城系统的性能表现成为决定用户留存与商业成败的关键因素。ZKmall 开源商城凭借 Java 研发与前后端分离架构的深度融合,构建起一套高效、稳定且具备强大扩展性的系统架构,从底层技术到上层应用全方位保障性能…...

嵌入式自学第二十天(5.13)
(1)线性表顺序存储的优缺点: 优点:无需为表中逻辑关系添加额外存储空间; 可以快速随机访问元素,时间复杂度O(1)。 缺点:插入删除需要移动元素O(n); 无法动态存储。 …...
Java 中的序列化与反序列化安全的理解?如何防止反序列化漏洞
序列化:将对象转换为字节流(通常用于网络传输、磁盘存储等)。 反序列化:将字节流还原为对象 常见攻击方式 利用类中重写的 readObject() / readResolve() / 构造方法执行任意代码 依赖漏洞类(如 CommonsCollections…...

快速上手Linux nfs网络文件系统
一、nfs服务的安装与部属 1.安装软件 设置火墙 测试:在客户端上安装nfs-utils后 showmount 服务端IP 2.共享资源 测试: 参数(参数写在共享策略文件的括号里) 二、nfs客户端动态挂载机制 当客户端和服务器之间没有数据交互时&am…...
Ubuntu 18.04.6下OpenSSL与OpenSSH版本升级
文章目录 升级背景下载必要软件包安装 zlib创建目录解压文件安装前置依赖离线安装依赖编译安装 zlib 安装 OpenSSL检查当前版本创建安装目录下载并解压 OpenSSL配置与安装验证安装解决动态库依赖问题永久更新环境变量安装OpenSSL常见错误 离线安装 Telnet 服务端指南1. 在联网机…...
kafka----初步安装与配置
目录标题 ⭐kafka 与 zookeeper间的关系一.集群部署二.修改配置文件三.分发安装包四.启动与关闭 kafka 与 zookeeper 相同,是以集群的形式使用 ⭐kafka 与 zookeeper间的关系 kafka 的使用 要在 zookeeper 集群配置好的基础上 使用要想启动kafka 要先启动 zookeep…...

26考研——中央处理器_异常和中断机制(5)
408答疑 文章目录 五、异常和中断机制异常和中断的基本概念异常和中断的分类异常的分类故障 (Fault)自陷 (Trap)终止 (Abort) 中断的分类可屏蔽中断不可屏蔽中断 异常和中断响应过程关中断保存断点和程序状态识别异常和中断并转到相应的处理程序 八、参考资料鲍鱼科技课件26王道…...

数据库实验报告 SQL SERVER 2008的基本操作 1
实验报告(第 1 次) 实验名称 SQL SERVER 2008的基本操作 实验时间 9月14日1-2节 一、实验内容 数据库的基本操作:包括创建、修改、附加、分离和删除数据库等。 二、源程序及主要算法说明 本次实验不涉及程序和算法。 三、测…...

Nature图形复现—两种快速绘制热图的方法
相信大家在科研过程中,会遇到热图,有时候会觉得热图理解起来比较困难,或者觉得绘制热图也比较困难。本期教程我们来深入了解热图、绘制热图。 热图是一种通过颜色深浅或色阶变化来直观展示数据分布、密度或数值大小的可视化工具。它在多个领域…...

INFINI Console 纳管 Elasticsearch 9(一):指标监控、数据管理、DSL 语句执行
Elasticsearch v9.0 版本最近已发布,而 INFINI Console 作为一款开源的非常轻量级的多集群、跨版本的搜索基础设施统一管控平台,是否支持最新的 Elasticsearch v9.0 集群管理呢?本文以 INFINI Console v1.29.2 为例,从指标监控、数…...

texlive 与 Texmaker 安装
一、安装 Texmaker 1、下载Texmaker 链接地址: Texmaker (free cross-platform latex editor) 点击 FREE DOWNLOAD ,点击 Texmaker_6.0.1_Win_x64.msi ,下载即可。 2、安装Texmaker 双击如下文件 若出现如下,点击更多信息 点击仍要运行 …...

机试刷题:进制转换3
题目来源:N诺 一、题目描述 二、解题思路 过程模拟,先转换为十进制,再转换为N进制即可。 注意:转换的时候可能出现字母,注意字母的表示。 用string和char类型对数据进行存储要更方便。 #include <iostream>…...

(顺序表、单链表、双链表)==>一篇解决!(Java版)
文章目录 一、线性表二、顺序表三、单链表四、双链表 一、线性表 线性表是最基本、最简单、也是最常用的一种数据结构。一个线性表是n个具有相同特性的数据元素的有限序列。 线性表的特征:数据元素之间具有一种“一对一”的逻辑关系。 线性表的分类: 线…...

JPG与PDF格式转换器
该插件可实现JPG与PDF格式的互转。 MainForm.Designer.cs using System.Windows.Forms; namespace JpgToPdfConverter {partial class MainForm{private System.ComponentModel.IContainer components null;protected override void Dispose(bool disposing){if (disposing &…...
如何在 CentOS 7 虚拟机上配置静态 IP 地址并保持重启后 SSH 连接
在使用 CentOS 7 的虚拟机时,我们通常需要配置静态 IP 地址,以确保在每次虚拟机重启后能够通过 SSH 连接。本文将介绍如何在 CentOS 7 系统中配置静态 IP 地址,并确保配置在系统重启后依然生效。 步骤 1:检查虚拟机网络接口 首先…...

手搓传染病模型(SEIARW)
在传染病传播的研究中,水传播途径是一个重要的考量因素。SEAIRW 模型(易感者 S - 暴露者 E - 感染者 I - 无症状感染者 A - 康复者 R - 水中病原体 W)综合考虑了人与人接触传播以及水传播的双重机制,为分析此类传染病提供了全面的…...

【Mac 从 0 到 1 保姆级配置教程 15】- Python 环境一键安装与配置,就是这么的丝滑
文章目录 前言安装 Python 环境VSCode 配置Python 环境NeoVim 配置 Python 环境(选看)1. Python LSP 配置2. 打开 python 语言支持 最后参考资料系列教程 Mac 从 0 到 1 保姆级配置教程目录,点击即可跳转对应文章: 【Mac 从 0 到 …...

【递归、搜索与回溯】专题一:递归(二)
📝前言说明: 本专栏主要记录本人递归,搜索与回溯算法的学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码…...