当前位置: 首页 > 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.gsyq.cn/news/13054.html

相关文章:

  • Linux环境之----POSIX信号量
  • 完整教程:Flink 容错从状态后端到 Exactly-Once
  • Java语法基础课程动手动脑及课后实验问题整理文档
  • 安装包制作流程-final
  • 一般路人向第39次CSP认证
  • 完整教程:微论-神经网络的亲情密码,权重矩阵的家庭关系论
  • Ansible + Docker 部署 Apache Nifi 1.28 单用户集群
  • Godot Outline
  • SentinelOne与MITRE ATTCK企业版2025评估的深度解析
  • 详细介绍:Docker的介绍
  • react useEffect Hook讲解
  • 2025海丰杯WP
  • 2025电线电缆厂家最新权威推荐榜:聚焦电线电缆实力企业,覆盖多场景需求助力精准选购
  • 9.27课后作业
  • 调度算法,上古三算法
  • 学位论文中 公式的插入,格式调整、编号以及引用
  • 复刻江协激光触发器
  • Linux云服务器如何手动配置DNS?
  • 第一章——概论 - AlgosEng
  • 野指针
  • 自己湿热内蕴出汗痒和岳母生病2天不洗澡发痒的不同-完美解释小孩为啥没那么容易痒
  • vue: ubuntu安装vue环境
  • golang实现ai聊天窗口
  • 图的分类法:解耦数据和图表类型
  • 完整教程:图解人工智能中的高等数学(python实现)---一元函数微分学
  • IDEA 2024的零卡死配置
  • 3.WPF - 依赖属性 - 实践
  • PyTorch详细安装指南与常见问题解决强大的方案
  • 图解KV Cache
  • [K230学习笔记] 00前言