day20_修改 删除功能
1版本号
1.1版本号机制作用
后端处理数据时 通常通过版本号机制 限制数据的随意覆盖
一般用在有多用户同时操作的业务数据表中 (很少变动的数据 一般不加)
1.2需要修改的部分
1数据库增加字段
修改现有数据
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删除功能
场景分析
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();}