SpringBootでは、データをページングして検索するにはどうすれば良いですか?

SpringBootでは、ページングクエリを実現するために、Spring Data JPAが提供するPagingAndSortingRepositoryインターフェースを使用することができます。

最初に、あなたのRepositoryインターフェースでPagingAndSortingRepositoryインターフェースを継承し、エンティティクラスと主キーのタイプを指定します。たとえば、Userという名前のエンティティをページングでクエリしたい場合、次のようにUserRepositoryインターフェースを作成できます:

@Repository
public interface UserRepository extends PagingAndSortingRepository<User, Long> {
}

次に、ServiceクラスにUserRepositoryを注入し、Pageableインターフェースを使用してページングパラメータを指定します。 Pageableインターフェースには多くの実装クラスがあり、最も一般的なものはPageRequestクラスです。PageRequestオブジェクトを作成し、ページ番号、1ページあたりのデータ量、およびソート規則を指定することができます。

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
    
    public Page<User> getUsers(int pageNo, int pageSize, String sortBy) {
        Pageable pageable = PageRequest.of(pageNo, pageSize, Sort.by(sortBy));
        return userRepository.findAll(pageable);
    }
}

上記のコードでは、 getUsersメソッドは3つのパラメータを受け取ります: pageNoは検索するページ番号を表し、pageSizeは1ページあたりのデータ量を表し、sortByはソート規則を表します。PageRequestオブジェクトを作成し、userRepository.findAll(pageable)メソッドを使用してクエリを実行しました。

最後、Controller層からUserServiceのgetUsersメソッドを呼び出して、ページネーションデータを取得し、フロントエンドに返すことができます。

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;
    
    @GetMapping
    public ResponseEntity<Page<User>> getUsers(
            @RequestParam(defaultValue = "0") int pageNo,
            @RequestParam(defaultValue = "10") int pageSize,
            @RequestParam(defaultValue = "id") String sortBy) {
        Page<User> page = userService.getUsers(pageNo, pageSize, sortBy);
        return ResponseEntity.ok(page);
    }
}

上記のコードでは、getUsersメソッドが3つのオプションのリクエストパラメータを受け取ります:pageNoはデフォルトで0のページ番号、pageSizeはデフォルトで10のデータ量、sortByはデフォルトでIDでソートされます。userService.getUsersメソッドを呼び出してページごとのデータを取得し、それをResponseEntityオブジェクトでラップしてフロントエンドに返します。

/usersのAPIにアクセスすると、ページネーションされた結果を取得することができます。例えば、/users?pageNo=0&pageSize=10&sortBy=nameにアクセスすると、最初のページで10件のデータを名前でソートした結果が返されます。

bannerAds