【JavaEE进阶】 图书管理系统开发日记——陆

news2024/11/29 22:30:33

文章目录

  • 🎋前言
  • 🍃删除图书
    • 🚩约定前后端交互接口
    • 🚩完善前端代码
    • 🚩接口测试
  • 🎍批量删除
    • 🚩约定前后端交互接口
    • 🚩实现后端服务器代码
      • 🎈控制层
      • 🎈业务层
      • 🎈数据层
    • 🚩前端代码实现
  • ⭕总结

🎋前言

年后我们紧接前面的项目继续开发,开始进行删除与批量删除的接口模块的开发。

🍃删除图书

关于删除图书,我们有两种做法,一种是=物理删除,一种是逻辑删除

逻辑删除:

  • 逻辑删除也称为软删除、假删除、Soft Delete,即不真正删除数据,⽽在某⾏数据上增加类型is_deleted的删除标识,⼀般使⽤UPDATE语句

物理删除:

  • 物理删除也称为硬删除,从数据库表中删除某⼀⾏或某⼀集合数据,⼀般使⽤DELETE语句

这里由于博主在建表的时候已经预留了状态位,所以这里博主使用的是逻辑删除。

🚩约定前后端交互接口

逻辑删除依然是更新逻辑,我们可以直接使⽤修改图书的接⼝

/book/updateBook

[请求]
/book/updateBook
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
[参数]
id=1&status=0
[响应]
“” //失败信息, 成功时返回空字符串

🚩完善前端代码

代码实现如下:

function deleteBook(id) {
    var isDelete = confirm("确认删除?");
    if (isDelete) {
        //删除图书
        $.ajax({
            type: "post",
            url: "/book/updateBook",
            data: {
                id: id,
                status: 0
            },
            success: function (result) {
                if(result == "") {
                    location.href = "book_list.html"
                } else {
                    console.log("删除失败,请联系管理员!")
                }
                //重新刷新⻚⾯
            }
        });
    }
}

🚩接口测试

选择删除
在这里插入图片描述
点击确定
在这里插入图片描述
删除成功
在这里插入图片描述

🎍批量删除

批量删除其实就是批量修改数据,代码书写也就比较简单。

🚩约定前后端交互接口

[请求]
/book/batchDeleteBook
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
[参数]
[响应]
“” //失败信息, 成功时返回空字符串

点击[批量删除]按钮时,只需要把复选框选中的图书的ID,发送到后端即可多个id,我们使⽤List的形式来传递参数

🚩实现后端服务器代码

🎈控制层

在这里插入图片描述

对传入数据进行一个日志打印,方便寻找错误

并对批量删除进行一个批量删除

@RequestMapping("/batchDeleteBook")
public boolean batchDeleteBook(@RequestParam List<Integer> ids){
    log.info("批量删除图书, ids:{}",ids);
    try{
        bookService.batchDeleteBook(ids);
    }catch (Exception e){
        log.error("批量删除异常,e:",e);
        return false;
    }
    return true;
}

🎈业务层

在这里插入图片描述
只需要调用数据层的方法并传参即可

public void batchDeleteBook(List<Integer> ids) {
    
    bookInfoMapper.batchDeleteBook(ids);
}

🎈数据层

在这里插入图片描述

批量删除需要⽤到动态SQL,这里博主使用xml的方式进行实现

接口定义如下:

void batchDeleteBook(@Param("ids") List<Integer> ids);

这里需要注意的是:

  • 当我们传递一个 List 实例或者数组作为参数对象传给 MyBatis。当你这么做的时候,MyBatis 会自动将它包装在一个 Map 中,用名称在作为键。List 实例将会以“list” 作为键,而数组实例将会以“array”作为键。所以,当我们传递的是一个List集合时,mybatis会自动把我们的list集合包装成以list为Key值的map。

所以博主这里加了注解进行解决,当然还有其他解决方法,可以参考 發V發 大佬写的 决解Mybatis传递List集合报错 Available parameters are [collection, list]

xml接口代码实现如下:
在这里插入图片描述

<update id="batchDeleteBook">
    update book_info set status=0
    where id in
    <foreach collection="ids" item="id" separator="," open="(" close=")">
        #{id}
    </foreach>
</update>

🚩前端代码实现

代码实现如下:

function batchDelete() {
    var isDelete = confirm("确认批量删除?");
    if (isDelete) {
        //获取复选框的id
        var ids = [];
        $("input:checkbox[name='selectBook']:checked").each(function () {
            ids.push($(this).val());
        });
        console.log(ids);
        //批量删除
        $.ajax({
            type: "post",
            url: "/book/batchDeleteBook?ids="+ids,
            success: function (result) {
                if (result) {
                    alert("删除成功");
                    //重新刷新⻚⾯
                    location.href = "book_list.html"
                }
            }
        });
    }
}

⭕总结

关于《【JavaEE进阶】 图书管理系统开发日记——陆》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!

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

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

相关文章

Uipath 调用Python 脚本程序详解

Python 活动概述 UiPath.Python.Activities 是一个新的活动包&#xff0c;创建它是为了支持直接从工作流运行 Python 脚本和方法。 其包含以下活动&#xff1a; Python 作用域(Python Scope) - 为 Python 活动提供作用域的容器。 加载 Python 脚本(Load Python Script) - 将 P…

Servlet JSP-Eclipse安装配置Maven插件

Maven 是一款比较常用的 Java 开发拓展包&#xff0c;它相当于一个全自动 jar 包管理器&#xff0c;会导入用户开发时需要使用的相应 jar 包。使用 Maven 开发 Java 程序&#xff0c;可以极大提升开发者的开发效率。下面我就跟大家介绍一下如何在 Eclipse 里安装和配置 Maven 插…

(一)【Jmeter】JDK及Jmeter的安装部署及简单配置

JDK的安装和环境变量配置 对于Linux、Mac和Windows系统&#xff0c;JDK的安装和环境变量配置方法略有不同。以下是针对这三种系统的详细步骤&#xff1a; 对于Linux系统&#xff1a; 下载适合Linux系统的JDK安装包&#xff0c;可以选择32位或64位的版本。 将JDK的安装包放置…

ubuntu服务器部署gitlab docker并配置nginx反向代理https访问

拉取镜像 docker pull gitlab/gitlab-ce运行容器 docker run --detach \--publish 9080:80 --publish 9022:22 --publish 9443:443\--namegitlab \--restartalways \--volume /home/docker/gitlab/config:/etc/gitlab \--volume /home/docker/gitlab/logs:/var/log/gitlab \-…

今天:旧时是这样“破五迎福”

昨&#xff08;正月初四&#xff09;天&#xff0c;笔者——“ 人民体验官 ”&#xff0c; 为了推广人民日报官方微博文化产品所发表在10余个网站自媒体平台上的文章《今天&#xff1a;大年初四迎灶神爷》&#xff0c;不知何故被笔者寄居养老城市的自媒体论坛反复拒之门外&…

Spring Boot3自定义异常及全局异常捕获

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途。 目录 前置条件 目的 主要步骤 定义自定义异常类 创建全局异常处理器 手动抛出自定义异常 前置条件 已经初始化好一个…

使用一根网线,让Ubuntu和正点原子I.MX6ULL开发板互相ping通

1.硬件准备 准备一根网线即可 2. 让windows和I.MX6ULLping通 2.1 找根网线将I.MX6ULL和电脑连起来 2.2 让I.MX6ULL通电运行起来&#xff0c;我这里使用的是正点原子版本的内核、 2.3 进入电脑的网络连接后&#xff0c;按照如下步骤操作 2.4 将ip地址、子网掩码、默认网关…

情人节html代码

一、一个带有心形和祝福消息的页面 如果想在网页上创建一个简单的情人节祝福&#xff0c;可以使用HTML和CSS。以下是一个简单的例子&#xff0c;它创建了一个带有心形和祝福消息的页面&#xff1a; <!DOCTYPE html> <html> <head> <title>情人节…

林浩然与杨凌芸的Java奇趣冒险:System与Runtime的大挑战

林浩然与杨凌芸的Java奇趣冒险&#xff1a;System与Runtime的大挑战 Lin Haoran and Yang Lingyun’s Java Adventure: The Grand Challenge of System and Runtime 在一个阳光明媚的日子&#xff0c;程序员大侠林浩然和智慧女神杨凌芸携手闯荡Java江湖。他们的故事并非刀光剑影…

[缓存] 1. 缓存共性问题

1. 缓存的作用 为什么需要缓存呢&#xff1f;缓存主要解决两个问题&#xff0c;一个是提高应用程序的性能&#xff0c;降低请求响应的延时&#xff1b;一个是提高应用程序的并发性。 2. 缓存的分类 本地缓存&#xff0c;分布式缓存 3. 缓存数据分类 3.1 数据缓存 程序数据直接…

Vue核心基础5:数据监测、收集表单数据、过滤器

1 数据监测 【代码】 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>总结</title><scrip…

LeetCode、435. 无重叠区间【中等,贪心 区间问题】

文章目录 前言LeetCode、435. 无重叠区间【中等&#xff0c;贪心 区间问题】题目链接及分类思路贪心、区间问题 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技…

力扣 第 384 场周赛 解题报告 | 珂学家 | 贪心构造 + KMP板子

前言 整体评价 因为是新春过年&#xff0c;所以题目出的相对简单一些&#xff0c;T4和上周一样&#xff0c;是字符串匹配模板题。 T1. 修改矩阵 思路: 模拟 按要求模拟即可 class Solution {public int[][] modifiedMatrix(int[][] matrix) {int h matrix.length;int w m…

如何一键启动、停止或重启运行在服务器内的幻兽帕鲁游戏服务进程?

如果你是用腾讯云轻量应用服务器一键部署的幻兽帕鲁服务器&#xff0c;那么可以在面板一键启动、停止或重启运行在服务器内的幻兽帕鲁游戏服务进程&#xff08;注意并非对服务器整机进行操作&#xff09;&#xff0c;无需手动在服务器内部运行命令。 详细教程地址&#xff1a;h…

2024年幻兽帕鲁服务器搭建方法_图文保姆级教程

幻兽帕鲁官方服务器不稳定&#xff1f;自己搭建幻兽帕鲁服务器&#xff0c;低延迟、稳定不卡&#xff0c;目前阿里云和腾讯云均推出幻兽帕鲁专用服务器&#xff0c;腾讯云直接提供幻兽帕鲁镜像系统&#xff0c;阿里云通过计算巢服务&#xff0c;均可以一键部署&#xff0c;鼠标…

2024幻兽帕鲁服务器创建教程_阿里PK腾讯超简单

幻兽帕鲁官方服务器不稳定&#xff1f;自己搭建幻兽帕鲁服务器&#xff0c;低延迟、稳定不卡&#xff0c;目前阿里云和腾讯云均推出幻兽帕鲁专用服务器&#xff0c;腾讯云直接提供幻兽帕鲁镜像系统&#xff0c;阿里云通过计算巢服务&#xff0c;均可以一键部署&#xff0c;鼠标…

智能汽车行业产业研究报告:毫米波雷达优势明显,核心壁垒是芯片、天线阵列、波形设计

今天分享的是智能汽车系列深度研究报告&#xff1a;《智能汽车行业产业研究报告&#xff1a;毫米波雷达优势明显&#xff0c;核心壁垒是芯片、天线阵列、波形设计》。 &#xff08;报告出品方&#xff1a;国泰君安证券&#xff09; 报告共计&#xff1a;67页 毫米波雷达被广泛…

mmdetection使用自己的voc数据集训练模型实战

一.自己数据集整理 将labelimg格式数据集进行整理 1.1. 更换图片后缀为jpg import os import shutilroot_path/media/ai-developer/imgfileos.listdir(root_path)for img in file:if img.endswith(jpeg) or img.endswith(JPG) or img.endswith(png):img_pathos.path.join(root…

关于显卡、显卡驱动、cuda、cuDNN等的区别

关于显卡、显卡驱动、cuda、cuDNN等的区别 刚接触AI或机器学习框架时&#xff0c;经常会被这几个概念搞混&#xff0c;尤其是显卡驱动、cuda、cuDNN这个三个软的东西&#xff1b;此外&#xff0c;NVCC、cudatoolkit又是什么呢&#xff1f; 1. 显卡(GPU) 显卡就是硬件&#xff…

C# winfrom中NPOI操作EXCEL

前言 1.整个Excel表格叫做工作表&#xff1a;WorkBook&#xff08;工作薄&#xff09;&#xff0c;包含的叫页&#xff08;工作表&#xff09;&#xff1a;Sheet&#xff1b;行&#xff1a;Row&#xff1b;单元格Cell。 2.忘了告诉大家npoi是做什么的了&#xff0c;npoi 能够读…