package com.rongyichuang.region.repository; import com.rongyichuang.region.entity.Region; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import java.util.List; @Repository public interface RegionRepository extends JpaRepository { /** * 根据父级ID查找子区域 */ List findByPidOrderByIdAsc(Long pid); /** * 根据级别查找区域 */ List findByLevelOrderByIdAsc(Integer level); /** * 根据状态查找区域 */ List findByStateOrderByIdAsc(Integer state); /** * 根据名称模糊查询 */ @Query("SELECT r FROM Region r WHERE r.name LIKE %:name% ORDER BY r.level, r.id") Page findByNameContaining(@Param("name") String name, Pageable pageable); /** * 根据名称和状态查询 */ @Query("SELECT r FROM Region r WHERE (:name IS NULL OR r.name LIKE %:name%) AND (:state IS NULL OR r.state = :state) ORDER BY r.level, r.id") Page findByNameAndState(@Param("name") String name, @Param("state") Integer state, Pageable pageable); /** * 查找所有省级区域(level=1) */ @Query("SELECT r FROM Region r WHERE r.level = 1 ORDER BY r.id") List findAllProvinces(); /** * 查找指定省份下的所有市级区域 */ @Query("SELECT r FROM Region r WHERE r.pid = :provinceId AND r.level = 2 ORDER BY r.id") List findCitiesByProvinceId(@Param("provinceId") Long provinceId); /** * 查找指定市下的所有区县 */ @Query("SELECT r FROM Region r WHERE r.pid = :cityId AND r.level = 3 ORDER BY r.id") List findDistrictsByCityId(@Param("cityId") Long cityId); /** * 构建树形结构查询 */ @Query("SELECT r FROM Region r WHERE r.pid = :parentId ORDER BY r.id") List findChildren(@Param("parentId") Long parentId); }