it-swarm.com.ru

Spring Data JPA применяет сортировку, разбиение на страницы вместе с предложением where

В настоящее время я использую Spring JPA и использую сортировку и разбиение на страницы, как описано здесь -

Как запрашивать данные через JPA-данные Spring с помощью сортировки и вывода страниц из коробки?

Теперь мой вопрос: как мне применить к этому пункт «где»?

Например. 

where PRODUCT_NAME='abc';
13
Pushkar

Для этого просто создайте метод запроса в интерфейсе своего репозитория. 

Посмотрите в документах, здесь .

Добавьте метод запроса с подкачкой и предложением where.

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

Таким образом, вы можете найти пользователя по свойству «фамилия» и настроить параметры пейджинга.

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. Служебный слой для передачи предложения where с использованием объекта Example и Pagination + Sorting вместе с использованием Pagable и Sort Class. Мы реализуем Pageable в контроллере для внедрения логики сортировки, а затем передадим этот объект Pagable на сервисный уровень.

     @Service
     Public class UserService{
        public Page<User> getUserListPaginated(`EXAMPLE<User>` searchTerm, Pageable pageable) {
            return userRepo.findAll(searchTerm,pageable);
        }
    }
    

Example<T> не принимает атрибут, если его значение равно нулю. для этого я использовал Integer id в классе Entity, так как я могу установить его значение null для первого вызова

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