web-dev-qa-db-ja.com

Spring Data JPAは、where句とともにソート、ページ付けを適用します

私は現在SpringJPAを使用しており、ここで説明するように並べ替えとページ付けを利用しています-

SpringデータJPAを介して、並べ替えとページングの両方でデータをクエリする方法は?

今私の質問は、これに「where」句をどのように適用するかです。

例えば。

where PRODUCT_NAME='abc';
14
Pushkar

このために、リポジトリインターフェイスにクエリメソッドを作成するだけです。

ドキュメントを見てください、 ここ

ページングとwhere句を使用してクエリメソッドを追加します。

Page<User> findByLastname(String lastname, Pageable pageable);

したがって、プロパティ「lastname」でユーザーを検索し、ページング設定を構成できます。

26
burna

私が見つけることができる最も簡単な方法は QueryDSLまたは仕様を使用 です。私はQueryDSLが好きです。

4
Hari Menon

Spring Data JPAをフェッチするには、ソート、ページ付け、およびwhere句で以下のコードを確認します。

  1. エンティティクラス

    @Entity
    @Table(name = "users")
    Public Class User{
        private String name;
        private Integer id;
        private String email;
        // add required setter getter//
    }
    
  2. リポジトリクラス

    @Repository("userRepository")
    @Transactional`
        public interface UserRepository extends JpaRepository<User, Integer>{
    
        }
    
  3. 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を使用しました

  1. 今コントローラークラス

    @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);
    
    
        }
    }
    
1
Palash