私は現在SpringJPAを使用しており、ここで説明するように並べ替えとページ付けを利用しています-
SpringデータJPAを介して、並べ替えとページングの両方でデータをクエリする方法は?
今私の質問は、これに「where」句をどのように適用するかです。
例えば。
where PRODUCT_NAME='abc';
このために、リポジトリインターフェイスにクエリメソッドを作成するだけです。
ドキュメントを見てください、 ここ 。
ページングとwhere句を使用してクエリメソッドを追加します。
Page<User> findByLastname(String lastname, Pageable pageable);
したがって、プロパティ「lastname」でユーザーを検索し、ページング設定を構成できます。
私が見つけることができる最も簡単な方法は QueryDSLまたは仕様を使用 です。私はQueryDSLが好きです。
Spring Data JPAをフェッチするには、ソート、ページ付け、およびwhere句で以下のコードを確認します。
エンティティクラス
@Entity
@Table(name = "users")
Public Class User{
private String name;
private Integer id;
private String email;
// add required setter getter//
}
リポジトリクラス
@Repository("userRepository")
@Transactional`
public interface UserRepository extends JpaRepository<User, Integer>{
}
Exampleオブジェクトを使用してwhere句を渡し、PagableクラスとSortクラスを使用してPagination + Sortingを一緒に渡すサービスレイヤー。コントローラーにPageableを実装して、並べ替えロジックを挿入し、そのPagableオブジェクトをサービスレイヤーに渡します。
@Service
Public class UserService{
public Page<User> getUserListPaginated(`EXAMPLE<User>` searchTerm, Pageable pageable) {
return userRepo.findAll(searchTerm,pageable);
}
}
Example<T>
は、その値がnullの場合、属性を取りません。そのため、最初の呼び出しで値nullを設定できるため、エンティティクラスで整数IDを使用しました
今コントローラークラス
@Controller
Public class UserController{
@Autowired UserService userService;
@GetMapping("/users")
public String users(Model model,@RequestParam(value="page",defaultValue = "0") Integer pageNumber, @SortDefault(sort = "name", direction = Sort.Direction.ASC) Sort sort){
Pageable pageable = PageRequest.of(pageNumber,10, sort);
Example<User> searchTerm = Example.of(new User());
Page<User> userList = userService.getUserListPaginated(searchTerm, pageable);
}
}