day20_修改 删除功能
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_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();
}

浙公网安备 33010602011771号