当前位置: 首页 > news >正文

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.hskmm.com/?act=detail&tid=19229

相关文章:

  • [题解]P10231 [COCI 2023/2024 #4] Putovanje
  • # Windows CMD 基本指令参考手册
  • P13019 [GESP202506 八级] 树上旅行
  • 完整教程:负载均衡式的在线OJ项目编写(二)
  • Java语法基础课程动手动脑及课后实验问题整理文档
  • 安装包制作流程-final
  • 让YOLO飞起来:从CPU到GPU的配置指南
  • 记录这辈子见到的第一道从上到下的树上倍增
  • 06.容器存储 - 教程
  • 1748:约瑟夫问题
  • Ansible + Docker 部署 Apache Nifi 1.28 单用户集群
  • 候机的队伍
  • Keil uVision5 设置 hex 输出路径,不放Objects目录下
  • 垃圾收集器G1ZGC详解
  • 2025海丰杯WP
  • 油猴脚本(tampermonkey)离线安装文件下载,带油猴(tampermonkey)插件清单
  • react useEffect Hook讲解
  • SentinelOne与MITRE ATTCK企业版2025评估的深度解析
  • 详细介绍:Docker的介绍
  • gen-ui-python
  • SPI和普通设计模式区别
  • 2025国内裱纸机厂家最新推荐排行榜:聚焦智能高速与全自动机型,权威精选综合实力 TOP3 厂家
  • 【题解】P13345 [EGOI 2025] IMO
  • 2025电线电缆厂家最新权威推荐榜:聚焦电线电缆实力企业,覆盖多场景需求助力精准选购
  • 9.27课后作业
  • 调度算法,上古三算法
  • 2025 年电脑租赁公司最新推荐排行榜:深度解析 TOP3 优质租电脑公司,助企业个人租赁电脑选择指南
  • 完整教程:✨WPF编程基础【1.2】:XAML中的属性
  • 学位论文中 公式的插入,格式调整、编号以及引用
  • 2025 北京羊蝎子餐厅推荐排行榜:TOP3最新必吃榜单,聚焦朝阳昌平东城等区域,揭秘北京羊蝎子餐厅必吃的门店!