2017. 7. 2. 22:07ㆍProject/[Java] Spring Boot - 좌석 관리 시스템
#CRUD 機能
public interface CrudRepository<T, ID extends Serializable>
extends Repository<T, ID> {
<S extends T> S save(S entity); (1)
T findOne(ID primaryKey); (2)
Iterable<T> findAll(); (3)
Long count(); (4)
void delete(T entity); (5)
boolean exists(ID primaryKey); (6)
// … more functionality omitted.
}
1) 엔티티 저장
2) ID로 엔티티 찾아 반환
3) 모든 엔티티 return
4) 엔티티의 숫자 return
5) 주어진 엔티티 삭제
6) ID로 엔티티 존재여부 return
#PAGING 기능
public interface PagingAndSortingRepository<T, ID extends Serializable>
extends CrudRepository<T, ID> {
Iterable<T> findAll(Sort sort);
Page<T> findAll(Pageable pageable);
}
예제) 20페이지 짜리
PagingAndSortingRepository<User, Long> repository = // … get access to a bean
Page<User> users = repository.findAll(new PageRequest(1, 20));
#create query by methodName
public interface PersonRepository extends Repository<User, Long> {
// 이메일주소와 이름을 조건으로 select
List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);
// 쿼리에 distinct 적용하기
List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);
List<Person> findPeopleDistinctByLastnameOrFirstname(String lastname, String firstname);
// Enabling ignoring case for an individual property
List<Person> findByLastnameIgnoreCase(String lastname);
// Enabling ignoring case for all suitable properties
List<Person> findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname);
// ORDER BY 적용
List<Person> findByLastnameOrderByFirstnameAsc(String lastname);
List<Person> findByLastnameOrderByFirstnameDesc(String lastname);
}
plus) Between, LessThan
, GreaterThan
, Like와 같은 연산자도 사용 가능
# 쿼리문에 paging과 sort, slice(?)를 사용
Page<User> findByLastname(String lastname, Pageable pageable);
Slice<User> findByLastname(String lastname, Pageable pageable);
List<User> findByLastname(String lastname, Sort sort);
List<User> findByLastname(String lastname, Pageable pageable);
# 쿼리 결과를 limit
//이름이 알파벳 a에 가까운 1명
User findFirstByOrderByLastnameAsc();
//나이가 가장 많은 1명
User findTopByOrderByAgeDesc();
//이름이 a에 가까운 10명(페이지 return)
Page<User> queryFirst10ByLastname(String lastname, Pageable pageable);
//이름이 a에 가까운 3명(slice return)
Slice<User> findTop3ByLastname(String lastname, Pageable pageable);
//이름이 a에 가까운 10명(list return)
List<User> findFirst10ByLastname(String lastname, Sort sort);
List<User> findTop10ByLastname(String lastname, Pageable pageable);
# jpa repository에서 지원하는 메소드명
http://arahansa.github.io/docs_spring/jpa.html 참고
<Custom Query 사용>
# namedQuery(엔티티에서 annotation > repository에서 선언) 사용할 경우
User 엔티티.java
@Entity
@NamedQuery(name = "User.findByEmailAddress",
query = "select u from User u where u.emailAddress = ?1")
public class User {
}
UserRepository.java
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByLastname(String lastname);
User findByEmailAddress(String emailAddress);
}
# @Query 사용할 경우
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select u from User u where u.firstname like %?1")
List<User> findByFirstnameEndsWith(String firstname);
}
# DB에서 쓰던 SQL문 사용하고 싶다면?
nativeQuery =true를 붙여준다.
public interface UserRepository extends JpaRepository<User, Long> {
@Query(value = "SELECT * FROM USERS WHERE EMAIL_ADDRESS = ?0", nativeQuery = true)
User findByEmailAddress(String emailAddress);
}
# annotation for parameter binding
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select u from User u where u.firstname = :firstname or u.lastname = :lastname")
User findByLastnameOrFirstname(@Param("lastname") String lastname,
@Param("firstname") String firstname);
}
<Update Query 사용>
@Modifying
@Query("update User u set u.firstname = ?1 where u.lastname = ?2")
int setFixedFirstnameFor(String firstname, String lastname);
<transaction 쿼리에 적용하기>
@Transactional(readOnly = true)
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByLastname(String lastname);
@Modifying
@Transactional
@Query("delete from User u where u.active = false")
void deleteInactiveUsers();
}
'Project > [Java] Spring Boot - 좌석 관리 시스템' 카테고리의 다른 글
Thymeleaf 復習 (0) | 2017.07.02 |
---|