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件のデータを名前でソートした結果が返されます。