WITH RECURSIVE valid_menus AS ( SELECT menu_id, menu_name, parent_id, order_num, path, app_component, component, `query`, route_name, is_frame, is_cache, menu_type, visible, STATUS, IFNULL(perms, '') AS perms, icon, create_time, 1 AS LEVEL FROM sys_menu WHERE STATUS = 0 AND visible = 0 AND (parent_id = 0 OR parent_id IS NULL) UNION ALL SELECT m.menu_id, m.menu_name, m.parent_id, m.order_num, m.path, m.app_component, m.component, m.`query`, m.route_name, m.is_frame, m.is_cache, m.menu_type, m.visible, m.STATUS, IFNULL(m.perms, '') AS perms, m.icon, m.create_time, vm.LEVEL + 1 FROM sys_menu m INNER JOIN valid_menus vm ON m.parent_id = vm.menu_id WHERE m.STATUS = 0 AND m.visible = 0 ) SELECT menu_id, menu_name, parent_id, order_num, path, app_component, component, `query`, route_name, is_frame, is_cache, menu_type, visible, STATUS, perms, icon, create_time FROM valid_menus update sys_menu menu_name = #{menuName}, parent_id = #{parentId}, order_num = #{orderNum}, path = #{path}, component = #{component}, app_component = #{appComponent}, `query` = #{query}, route_name = #{routeName}, is_frame = #{isFrame}, is_cache = #{isCache}, menu_type = #{menuType}, visible = #{visible}, status = #{status}, perms = #{perms}, icon = #{icon}, remark = #{remark}, update_by = #{updateBy}, update_time = sysdate() where menu_id = #{menuId} insert into sys_menu( menu_id, parent_id, menu_name, order_num, path, app_component, component, `query`, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, remark, create_by, create_time )values( #{menuId}, #{parentId}, #{menuName}, #{orderNum}, #{path}, #{appComponent}, #{component}, #{query}, #{routeName}, #{isFrame}, #{isCache}, #{menuType}, #{visible}, #{status}, #{perms}, #{icon}, #{remark}, #{createBy}, sysdate() ) delete from sys_menu where menu_id = #{menuId}