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_menu
    where mid in (23,24)

dao

    <delete id="deleteMenuMultiple">
        delete  from admin_menu
        where 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,14
        String 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调用service
        AdminMenuService 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
            //给分页组件 页面信息对象   pageInfo
            PageInfo 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();





    }
posted @ 2025-09-27 19:05  小胡coding  阅读(9)  评论(0)    收藏  举报