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<Region, Long> {
|
|
/**
|
* 根据父级ID查找子区域
|
*/
|
List<Region> findByPidOrderByIdAsc(Long pid);
|
|
/**
|
* 根据级别查找区域
|
*/
|
List<Region> findByLevelOrderByIdAsc(Integer level);
|
|
/**
|
* 根据状态查找区域
|
*/
|
List<Region> findByStateOrderByIdAsc(Integer state);
|
|
/**
|
* 根据名称模糊查询
|
*/
|
@Query("SELECT r FROM Region r WHERE r.name LIKE %:name% ORDER BY r.level, r.id")
|
Page<Region> 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<Region> 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<Region> findAllProvinces();
|
|
/**
|
* 查找指定省份下的所有市级区域
|
*/
|
@Query("SELECT r FROM Region r WHERE r.pid = :provinceId AND r.level = 2 ORDER BY r.id")
|
List<Region> findCitiesByProvinceId(@Param("provinceId") Long provinceId);
|
|
/**
|
* 查找指定市下的所有区县
|
*/
|
@Query("SELECT r FROM Region r WHERE r.pid = :cityId AND r.level = 3 ORDER BY r.id")
|
List<Region> findDistrictsByCityId(@Param("cityId") Long cityId);
|
|
/**
|
* 构建树形结构查询
|
*/
|
@Query("SELECT r FROM Region r WHERE r.pid = :parentId ORDER BY r.id")
|
List<Region> findChildren(@Param("parentId") Long parentId);
|
}
|