day20_修改 删除功能

day20_修改 删除功能

1版本号

1.1版本号机制作用

后端处理数据时 通常通过版本号机制 限制数据的随意覆盖

一般用在有多用户同时操作的业务数据表中 (很少变动的数据 一般不加)

image-20250820101858708

1.2需要修改的部分

1数据库增加字段

image-20250820101934574

修改现有数据

image-20250820101959532

2修改接口流程

增加修改前的数据监测

    protected void updateMenu(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");String midStr = req.getParameter("mid");String menuname = req.getParameter("menuname");String pidStr = req.getParameter("pid");String url = req.getParameter("url");String glyphicon = req.getParameter("glyphicon");String versionStr = req.getParameter("version");Long mid = null;Long pid = null;if(midStr!=null&&!"".equals(midStr)){mid = Long.valueOf(midStr);}if(pidStr!=null&&!"".equals(pidStr)){pid = Long.valueOf(pidStr);}Integer version = null;if(versionStr!=null&&!"".equals(versionStr)){version = Integer.valueOf(versionStr);}AdminMenu inputMenu = new AdminMenu(mid,  menuname,  pid,  url,  glyphicon);AdminMenuService adminMenuService = new AdminMenuServiceImpl();//先检测版本号是否一致 是否可以修改数据AdminMenu checkVersion = adminMenuService.getAdminMenuByMidVersion(mid, version);Result result = null;if(checkVersion!=null){Integer resNum = adminMenuService.updateAdminMenu(inputMenu);if(resNum>0){//数据处理成功result =  new Result(ReturnCode.OPERATION_DATA_SUCCESS.getCode(), ReturnCode.OPERATION_DATA_SUCCESS.getMsg());}else{result =  new Result(ReturnCode.OPERATION_DATA_FAILED.getCode(), ReturnCode.OPERATION_DATA_FAILED.getMsg());}}else{result =  new Result(ReturnCode.OPERATION_DATA_FAILED3.getCode(), ReturnCode.OPERATION_DATA_FAILED3.getMsg());}resp.setContentType("application/json;charset=utf-8");PrintWriter writer = resp.getWriter();writer.print(JSON.toJSONString(result));writer.close();}

sql映射

<select id="getAdminMenuByMidVersion" resultMap="AdminMenuBaseMap">select * from admin_menu where mid = #{mid} and version = #{version}</select>

调整修改语句 增加版本号修改

<update id="updateAdminMenu">update admin_menu set  menuname = #{menuname},pid = #{pid},url= #{url}, glyphicon = #{glyphicon} ,version = (version+1)where mid = #{mid}</update>

3界面反馈调整

//修改提交
const updateSubmit = ()=>{//发请求处理数据myPost('/menus/updateMenu', updateForm.updateData).then(resp => {console.log(resp.data);if (resp.data.code == 20010) {//关框updateDialogVisible.value = false//显示操作结果ElMessage.success(resp.data.msg)//刷新数据 保留当前页码和查询条件//把改后的page 作为参数 通过请求传走let params1 = tableData.pageInfo;let params2 = queryForm;//json对象组合语法let allParam = { ...params1, ...params2 }//发送请求myQuery(allParam)queryMenuLevel1()//直接重新查询//myQuery({})}else if( resp.data.code == 20013){//增加版本号不对的反馈 不关框 直接刷新数据ElMessage.warning(resp.data.msg)//刷新数据 保留当前页码和查询条件//把改后的page 作为参数 通过请求传走let params1 = tableData.pageInfo;let params2 = queryForm;//json对象组合语法let allParam = { ...params1, ...params2 }//发送请求myQuery(allParam)queryMenuLevel1()//重新获取updateform的数据myGet("/menus/updateMenuInfo",{mid:updateForm.updateData.mid}).then(resp=>{console.log(resp.data.returnData);//把后端读到的完整数据 加载到updateForm上updateForm.updateData = resp.data.returnData})}})}

2删除功能

场景分析

image-20250820104037542

sql分析

-- 使用动态sql 支持多条删除
delete  from admin_menuwhere mid in (23,24)

dao

    <delete id="deleteMenuMultiple">delete  from admin_menuwhere mid in<foreach collection="listMid" item="mid" separator="," open="(" close=")">#{mid}</foreach></delete>

删除接口

需要接收多个编号 并转成列表 传给删除方法

    protected void deleteMenu(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//11,12,13,14String listMidStr = req.getParameter("listMid");List<Long> listMid = new ArrayList<>();for(String midStr: listMidStr.split(",")){listMid.add(Long.valueOf(midStr));}AdminMenuService adminMenuService = new AdminMenuServiceImpl();Integer resNum = adminMenuService.deleteMenuMultiple(listMid);Result result = null;if(resNum>0){//数据处理成功result =  new Result(ReturnCode.OPERATION_DATA_SUCCESS.getCode(), ReturnCode.OPERATION_DATA_SUCCESS.getMsg());}else{result =  new Result(ReturnCode.OPERATION_DATA_FAILED.getCode(), ReturnCode.OPERATION_DATA_FAILED.getMsg());}resp.setContentType("application/json;charset=utf-8");PrintWriter writer = resp.getWriter();writer.print(JSON.toJSONString(result));writer.close();}

删除界面

删除功能使用messageBox 确认框 提示用户删除 再做实际删除

//删除开框
const openDeleteDialog = ()=>{let currentRows =  tableRef.value.getSelectionRows()console.log(currentRows);if(currentRows.length>0){//显示信息用的let showMsg = []//发送mid用的let listmid = []//从页面table取dao的数据 组织不同的数据集合currentRows.forEach(data=>{showMsg.push(`${data.mid}-${data.menuname}`)listmid.push(data.mid)})//确认框ElMessageBox.confirm(`<h3 style='margin:5px'>确定要删除以下数据么?</h3>[${showMsg}]`,'警告',{confirmButtonText: '删除',cancelButtonText: '取消',type: 'warning',//支持html标签自定义文本内容dangerouslyUseHTMLString: true,}).then(() => {console.log("发请求删除");myPost("/menus/deleteMenu",{listMid:listmid.join(",")}).then(resp=>{if (resp.data.code == 20010) {//显示操作结果ElMessage.success(resp.data.msg)//刷新数据 保留当前页码和查询条件//把改后的page 作为参数 通过请求传走let params1 = tableData.pageInfo;let params2 = queryForm;//json对象组合语法let allParam = { ...params1, ...params2 }//发送请求myQuery(allParam)queryMenuLevel1()//直接重新查询//myQuery({})}})}).catch(() => {console.log("啥都不干");})}else{ElMessage.warning("请先选择数据......")}}

3所有功能完成后 需要整体测试

查询与删除一起使用的bug 需要限制查询的最大页数

    protected void listMenu(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("utf-8");//1接参数 封对象//页码参数String pageStr = req.getParameter("page");String pageSizeStr = req.getParameter("pageSize");//把page pageSize 做成非必填项  有默认值Integer page = 1;if(pageStr!=null&&!"".equals(pageStr)){page = Integer.valueOf(pageStr);}Integer pageSize = 10;if(pageSizeStr!=null&&!"".equals(pageSizeStr)){pageSize = Integer.valueOf(pageSizeStr);}//查询参数String menuname = req.getParameter("menuname");String pidStr = req.getParameter("pid");Long pid = null;if(pidStr!=null&&!"".equals(pidStr)){pid = Long.valueOf(pidStr);}AdminMenu inputMenu = new AdminMenu(menuname, pid);//2调用serviceAdminMenuService adminMenuService = new AdminMenuServiceImpl();Integer total = adminMenuService.countMenuByCondition(inputMenu);//判断是否超页 如果超页 查当前最大页数Integer totalPage = PageInfo.getTotalPage(total, pageSize);if(page>totalPage&&page!=1){page = totalPage;}//使用调整过的page数据查询 阻止超总页数List<AdminMenu> adminMenus = adminMenuService.listMenuByCondition(inputMenu, page, pageSize);//3根据执行结果返回数据Result result = new Result();if(adminMenus.size()>0){result.setCode(ReturnCode.QUERY_SUCCESS.getCode());result.setMsg(ReturnCode.QUERY_SUCCESS.getMsg());//给table 菜单列表        adminMenus//给分页组件 页面信息对象   pageInfoPageInfo pageInfo = new PageInfo(page,pageSize,total);result.setPageInfo(pageInfo);result.setReturnData(adminMenus);}else{result.setCode(ReturnCode.QUERY_NODATA.getCode());result.setMsg(ReturnCode.QUERY_NODATA.getMsg());}resp.setContentType("application/json;charset=utf-8");PrintWriter writer = resp.getWriter();writer.print(JSON.toJSONString(result));writer.close();}

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

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

相关文章

[题解]P10231 [COCI 2023/2024 #4] Putovanje

思路 考虑从每一个 \(d_i \neq -1\) 的点开始往外走 \(d_i\) 步,然后所有这些点走到的点的集合取交集就是答案,复杂度是 \(\Theta(n^2)\) 的。 注意到我们需要对一些集合取交,容易想到 bitset 优化,此时的复杂度瓶…

首都农村医学人才培养体系建设与农村医学人才培养的研究与实践 网站电子元器件做哪个网站好

目录 什么是数据库数据库的概念模型层次模型网状模型关系模型 为什么要使用关系型数据库完整性约束结构化查询语言SQL基本语句 什么是数据库 考虑这些问题&#xff1a;当用户使用软件计算时&#xff0c;如果想要保存计算结果或者想选择不同的题目&#xff0c;是否要保存、读取…

网站技术外包公司建设网站前的市场分析包括

微深节能格雷母线高精度位移测量系统是一种先进的工业自动化位置检测解决方案&#xff0c;它被广泛应用于煤码头自动化翻堆及取料集控系统中&#xff0c;以实现对斗轮堆取料机等大型机械设备的精准定位和自动化控制。 系统原理简述&#xff1a; 格雷母线系统的工作原理基于电磁…

网站租用服务器价格建设一个网站要多少钱

1. 抽象 在面向对象编程中&#xff0c;抽象是指将类的属性和方法捆绑在一起&#xff0c;形成一个整体。抽象类无法实例化&#xff0c;但可以作为其他类的基类或父类。在Python中&#xff0c;我们使用abc模块定义抽象类&#xff0c;其中至少包含一个抽象方法。抽象方法是无法直…

加强网站建设和维护福州营销网站建设模板

一、引出问题 在学习C语言单目操作符中~按位取反的过程中&#xff0c;对这样一段代码的结果产生了疑惑&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h>int main() {int a 0;int b ~a;//按位取反printf("%d\n", b);return 0; }输出结果…

Linux环境之----POSIX信号量

Linux环境之----POSIX信号量pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco",…

WPF Prism register interface and service, view and viewmodel, IRegionManager, RequestNavigate

Install-Package Prism.DryIOC; Install-Package Prism.Wpf;Install-Package Microsoft.Xaml.Behaviors.WPF; //App.xaml <prism:PrismApplication x:Class="WpfApp14.App"xmlns="http://schemas.m…

完整教程:Flink 容错从状态后端到 Exactly-Once

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

门户网站属于新媒体吗台州网站建设慕枫

莆田学院录取分数线2020是多少分&#xff0c;各专业录取分数线是多少&#xff0c;是每个填报莆田学院的考生最关注的问题&#xff0c;随着各省高考录取批次相继公布&#xff0c;考生也开始关心是否被录取&#xff0c;本站小编整理相关信息供参考&#xff0c;仅供参考。一、莆田…

兼职做网站赚钱吗网站首页设计图片简约

ChatGPT Admin Web 在团队和组织内共享使用人工智能的一站式解决方案。 ​编辑 ​编辑 ​编辑 CAW 是一个自托管网络应用程序&#xff0c;提供开箱即用的用户管理&#xff0c;包括后台界面以及可配置的支付计划和相关支付界面。 GitHub Sponsor / 爱发电 功能 Features …

【08】海康相机C#开发——在海康MVS的**C#实例中添加控件报错**“`不能在本地化模式下添加组件。在 Language 属性中选择”(默认)”以返回到默认格式,然后添加组件`” - 实践

【08】海康相机C#开发——在海康MVS的**C#实例中添加控件报错**“`不能在本地化模式下添加组件。在 Language 属性中选择”(默认)”以返回到默认格式,然后添加组件`” - 实践2025-09-27 18:47 tlnshuju 阅读(0) 评…

哪个建立网站好个人网上卖货的平台

&#x1f497;个人主页&#x1f497; ⭐个人专栏——数据结构学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 导读&#xff1a; 我们在前面学习了单链表和顺序表&#xff0c;以及栈和队列。 今天我们来学习小堆。 关注博主或是订阅专栏&a…

# Windows CMD 基本指令参考手册

Windows CMD 基本指令参考手册常用命令提示符指令速查指南,包含直接复制功能Windows 命令提示符(CMD)是一个强大的工具,可以让您通过输入命令来执行各种系统操作。本参考手册整理了最常用的 CMD 指令,方便您快速查…

P13019 [GESP202506 八级] 树上旅行

解题思路 这个问题需要在有根树上模拟移动操作,但直接模拟会超时(因为移动次数可能很大)。核心思想是使用二进制提升(Binary Lifting)技术来优化移动过程。 关键观察:向上移动(移动到父节点):可以使用倍增表 …

完整教程:负载均衡式的在线OJ项目编写(二)

完整教程:负载均衡式的在线OJ项目编写(二)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

Java语法基础课程动手动脑及课后实验问题整理文档

一、编程思维与项目分解相关按照“将整个程序分成若干个组件(分解);将多次出现的相似功能设成独立的方法(模式识别、抽象、算法);调试每个独立组件的健壮性(单元测试);按照功能要求进行组件组合(整合);再测…

安装包制作流程-final

1.给项目exe文件添加 管理员权限添加清单文件:在 Visual Studio 中,右键点击你的 WPF 项目,选择“添加” > “新建项”,然后选择“应用程序清单文件 (app.manifest)”并添加。如果已存在该文件,此步骤可省略。…

让YOLO飞起来:从CPU到GPU的配置指南

最近在配置YOLO(You Only Look Once)进行物体检测和图像分割任务时,发现默认安装的情况下,YOLO使用的是CPU进行计算。 这对于需要处理大量图像或实时检测的任务来说,效率明显不足。 本文将详细介绍如何将YOLO从CP…

记录这辈子见到的第一道从上到下的树上倍增

这道题先是浪费我半个下午做,做不出来有时好久看题解实现,气死我了。 题意。 给定一张 \(N\) 点的树,让我们考虑断掉每一条边,统计分裂出的两个子树的重心编号和之和。 要求 \(O(nlogn)\) 或更优的时间复杂度。 做…

忘形篇

忘形篇先想想暴力怎么做