Java for Beginner
672 subscribers
540 photos
155 videos
12 files
826 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Создание методов для поиска данных в Spring Data JPA

Spring Data JPA позволяет разработчикам создавать методы для поиска данных без написания SQL-запросов. Это достигается благодаря методам запроса на основе имен и JPQL-запросам.

Методы поиска по имени

Spring Data позволяет создавать методы поиска, просто добавляя определенные суффиксы в их имена.

Примеры методов поиска:
findBy — находит по полю.
findBy...And... — находит по нескольким полям.
findBy...Or... — находит по одному из нескольких полей.


Предположим, у нас есть сущность User:
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;

@Entity
public class User {
@Id
@GeneratedValue
private Long id;
private String name;
private String email;

// getters and setters
}


Теперь создадим репозиторий:
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByName(String name);
User findByEmail(String email);
List<User> findByNameAndEmail(String name, String email);
}


Использование этих методов:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

@Autowired
private UserRepository userRepository;

public List<User> getUsersByName(String name) {
return userRepository.findByName(name);
}

public User getUserByEmail(String email) {
return userRepository.findByEmail(email);
}

public List<User> getUsersByNameAndEmail(String name, String email) {
return userRepository.findByNameAndEmail(name, email);
}
}


Методы с использованием JPQL

JPQL (Java Persistence Query Language) — это язык запросов, похожий на SQL, но использующий сущности вместо таблиц. В Spring Data JPA вы можете использовать JPQL-запросы с аннотацией @Query.

Добавим метод с JPQL-запросом в UserRepository:
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;

public interface UserRepository extends JpaRepository<User, Long> {

@Query("SELECT u FROM User u WHERE u.name = :name")
List<User> findUsersByName(@Param("name") String name);

@Query("SELECT u FROM User u WHERE u.email LIKE %:emailDomain")
List<User> findUsersByEmailDomain(@Param("emailDomain") String emailDomain);
}


Теперь мы можем использовать эти методы для более гибкого поиска:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {

@Autowired
private UserRepository userRepository;

public List<User> findUsersByEmailDomain(String domain) {
return userRepository.findUsersByEmailDomain(domain);
}
}


Сортировка и пагинация

Spring Data JPA позволяет легко добавлять сортировку и пагинацию к любым методам поиска.

Пример с использованием сортировки:
import org.springframework.data.domain.Sort;

List<User> findAll(Sort sort);

List<User> usersSortedByName = userRepository.findAll(Sort.by("name"));


Пример с пагинацией:
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;

Page<User> findAll(PageRequest pageable);

Page<User> usersPage = userRepository.findAll(PageRequest.of(0, 10));


#Java #Training #Spring #JPQL