[JPA] QueryMethod의 정의 및 기본실습 1

jpa, spring

Simple CRUD Jpa Repository #

■ findAll() #

table의 전체값을 가져오는 메소드

User user1 = new User("Jack", "jack@email");
User user2 = new User("Samuel", "samu@email");
userRepository.saveAll(Lists.newArrayList(user1, user2));
List<User> users = userRepository.findAll();
users.forEach(System.out::println);

■ findById() #

Optional<User> user = userRepository.findById(1L);
System.out.println(user);

■ flush() #

userRepository.save(new User("name", "email"));
userRepository.flush();
// == saveAndFlush(new User("name", "email"));
userRepository.findAll().forEach(System.out::println);

■ count() #

long count = userRepository.count();
System.out.println(count);

■ existsById() #

boolean exits = userRepository.existsById(1L);
System.out.println(exits);

■ delete #

userRepository.delete(userRepository.findById(1L).orElseThrow(RuntimeException::new));

■ deleteById(index) #

userRepository.deleteById(1L);

■ deleteAll() #

userRepository.deleteAll();

■ deleteAllInBatch() #

userRepository.deleteAllInBatch(userRepository.findAllById(Lists.newArrayList(1L, 3L)));

Example (searching) #

ExampleMatcher matcher = ExampleMatcher.matching()
    .withIgnorePaths("name") // name은 매칭안함
    .withMatcher("email", GenericPropertyMatchers.endsWith()); // email 항목의 끝부분만 매치

Example<User> example = Example.of(new User("ma", "fastcam.com"), matcher);
userRepository.findAll(example).forEach(System.out::println);
User user = new User();
user.setEmail("slow");

ExampleMatcher matcher = ExampleMatcher.matching().withMatcher("email", GenericPropertyMatchers.contains());
Example<User> example = Example.of(user, matcher);

userRepository.findAll(example).forEach(System.out::println);

Save #

userRepository.save(new User("Ben", "ben@email.com"));

User user = userRepository.findById(1L).orElse(null);
user.setEmail("updated@email.com");

userRepository.save(user);

find…By() #

public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByName(String name);
}
@Autowired
private UserRepository userRepository;

@Test
void select() {
    System.out.println(userRepository.findByName("dennis"));
}

…By …() #

// repository
User findByEmail(String email);
User getByEmail(String email);
User readByEmail(String email);
User queryByEmail(String email);
User searchByEmail(String email);
User streamByEmail(String email);
User findUserByEmail(String email);
User findSomethingByEmail(String email);
// test
System.out.println("find by e-mail : " + userRepository.findByEmail("ben@email.com"));
System.out.println("read by e-mail : " + userRepository.readByEmail("ben@email.com"));
System.out.println("get by e-mail : " + userRepository.getByEmail("ben@email.com"));
System.out.println("query by e-mail : " + userRepository.queryByEmail("ben@email.com"));
System.out.println("search by e-mail : " + userRepository.searchByEmail("ben@email.com"));
System.out.println("stream by e-mail : " + userRepository.streamByEmail("ben@email.com"));
System.out.println("find user by e-mail : " + userRepository.findUserByEmail("ben@email.com"));
System.out.println("find something by e-mail : " + userRepository.findSomethingByEmail("ben@email.com"));

findSomethingByEmail() 로 동작시켜도 오류없이 돌아감.


접두사 뒤에 붙는 First, Top #

// repository
List<User> findFirst1ByName(String name);
List<User> findTop1ByName(String name);
// test
System.out.println("find something by e-mail : " + userRepository.findFirst1ByName("Ben"));
System.out.println("find something by e-mail : " + userRepository.findTop1ByName("Ben"));