一、Dao层
1.SysMenuDao中
public interface SysMenuDao {
// 删除操作 统计此菜单对应子菜单的个数 返回值个数【如果子不为0,则不能直接删除
int getChildCount(Integer id);
//基于菜单的id执行菜单的删除操作
int deleteObject(Integer id);
2.新建Dao-SysRoleMenuDao
/**
* @author : zhenzhen
* @date : 2019/3/15 22:34
* 菜单对应数据删除
*/
public interface SysRoleMenuDao {
// 基于菜单id 删除角色和菜单的关系数据
int deleteObjectsByMenuId(Integer menuId);
}
二、mapper.xml–重点难点
mapper1
<!--基于菜单id统计子菜单的个数-->
<select id="getChildCount" resultType="int">
select count(*)
from sys_menus
where parentId=#{id}
</select>
<!--基于子菜单查询后,符合操作规定进行删除-->
<delete id="deleteObject">
delete from sys_menus where id=#{id}
</delete>
mapper2
<mapper namespace="com.jt.sys.dao.SysRoleMenuDao">
<!--删除:基于菜单id 删除角色和菜单的关系数据
int deleteObjectsByMenuId(Integer menuId);-->
<delete id="deleteObjectsByMenuId">
delete from sys_role_menus
where menu_id=#{menu_id}
</delete>
</mapper>
三、业务层service 写逻辑
service
// 删除菜单 看是否有子菜单 :有子菜单不允许删除。
// 无:1.删除sys_menu子菜单信息 2.删除 sys_role_menu中对应关系
// 返回删除条数 -int类型
int deleteObject(Integer id);
serviceImpl
@Autowired
private SysMenuDao sysMenuDao; //关联sys_menu表
@Autowired
private SysRoleMenuDao sysRoleMenuDao;//关联sys_role_menu表
@Override
public int deleteObject(Integer id) {
// 验证参数有效性
if(id==null||id<1){
throw new IllegalArgumentException("参数无效");
}
// 基于id判定是否有子菜单
int child = sysMenuDao.getChildCount(id);
if(child>0){
throw new ServiceException("请先删除子菜单");
}
// 基于id删除菜单表中记录(无)
int rows = sysMenuDao.deleteObject(id);
// 基于id删除菜单角色表中记录
sysRoleMenuDao.deleteObjectsByMenuId(id);
// 返回删除结果
return rows;
}
四、Controller
@RequestMapping("doDeleteObejct")
@ResponseBody
public JsonResult doDeleteObejct(Integer id){
sysMenuService.deleteObject(id);
return new JsonResult("delete ok!");
}
五、测验一下!
访问:http://localhost:8080/ssmday4/menu/doDeleteObejct?id=24
结果:
访问:http://localhost:8080/ssmday4/menu/doDeleteObejct?id=45
结果:
客户端
一、menu.list
$(function(){
doGetObjects();
//按钮事件注册
$(".input-group-btn")
.on("click",".btn-delete",doDeleteObject);
});
function doDeleteObject(){
//1.获取选中的记录id,并进行判定
var id=doGetCheckedId();
if(!id){
alert("请先选中");
return;
}
//2.定义参数
var params={"id":id};
//3.定义url
var url="menu/doDeleteObject"
//4.发送异步请求执行删除操作
$.post(url,params,function(result){
if(result.state==1){
alert(result.message);
doGetObjects();
}else{
alert(result.message);
}
})
}
//获取选中的记录的id值
function doGetCheckedId(){
//1.获取选中的记录
var selections=$("#menuTable")
//bootstrapTreeTable是treeGrid插件内部定义的jquery扩展函数
//getSelections为扩展函数内部要调用的一个方法
.bootstrapTreeTable("getSelections");
//打印一下试试
console.log(selections);
//2.对记录进行判定
if(selections.length==1)
return selections[0].id;
}
测试:
删除47父菜单:
删除47子菜单: