content: 
  package com.platform.modules.system.repository;
  
  import com.platform.modules.system.domain.Menu;
  import org.springframework.data.jpa.repository.JpaRepository;
  import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
  import org.springframework.data.jpa.repository.Modifying;
  import org.springframework.data.jpa.repository.Query;
  import java.util.LinkedHashSet;
  import java.util.List;
  import java.util.Set;
  
  /**
   * @author AllDataDC
   * @date 2023-01-27
   */
  public interface MenuRepository extends JpaRepository<Menu, Long>, JpaSpecificationExecutor<Menu> {
  
      /**
       * 根据菜单标题查询
       * @param title 菜单标题
       * @return /
       */
      Menu findByTitle(String title);
  
      /**
       * 根据组件名称查询
       * @param name 组件名称
       * @return /
       */
      Menu findByComponentName(String name);
  
      /**
       * 根据菜单的 PID 查询
       * @param pid /
       * @return /
       */
      List<Menu> findByPidOrderByMenuSort(long pid);
  
      /**
       * 查询顶级菜单
       * @return /
       */
      List<Menu> findByPidIsNullOrderByMenuSort();
  
      /**
       * 根据角色ID与菜单类型查询菜单
       * @param roleIds roleIDs
       * @param type 类型
       * @return /
       */
      @Query(value = "SELECT m.* FROM sys_menu m, sys_roles_menus r WHERE " +
              "m.menu_id = r.menu_id AND r.role_id IN ?1 AND type != ?2 order by m.menu_sort asc",nativeQuery = true)
      LinkedHashSet<Menu> findByRoleIdsAndTypeNot(Set<Long> roleIds, int type);
  
      /**
       * 根据角色ID与菜单类型查询菜单
       * @param roleIds roleIDs
       * @param type 类型
       * @return /
       */
      @Query(value = "SELECT m.* FROM sys_menu m, sys_roles_menus r WHERE " +
              "m.menu_id = r.menu_id AND r.role_id IN ?1 order by m.menu_sort asc",nativeQuery = true)
      LinkedHashSet<Menu> findByRoleIds(Set<Long> roleIds);
  
      /**
       * 获取节点数量
       * @param id /
       * @return /
       */
      int countByPid(Long id);
  
      /**
       * 更新节点数目
       * @param count /
       * @param menuId /
       */
      @Modifying
      @Query(value = " update sys_menu set sub_count = ?1 where menu_id = ?2 ",nativeQuery = true)
      void updateSubCntById(int count, Long menuId);
  }
  