Page History
Info |
---|
JPA Repositori를 통해 일반적인 검색 기능은 앞장에서 여러가지 샘플을 통해 살펴보았습니다. 이번장에서는 조금더 복잡한 조회쿼리가 가능하고, 효율적인 저장관점에서의 저장소 구현을 알아보겠습니다저장관점에서의 Repository 기능을 활용해보겠습니다. JPA저장소는 읽기/저장/삭제가 모두되고, 최종 DB저장소의 반영까지 책임(트랜잭션처리)을 지는 양방향 영속성 객체이다라고 간단하게 정의 가능합니다. |
...
JPA의 특서오가 더불어 관계형 DB의 특성을 더 잘알고 있어야 합니다. ( 난이도 업 )
검색및 집계 처리(복습)
검색 함수쿼리
Code Block | ||||
---|---|---|---|---|
| ||||
public interface AddressRepo extends CrudRepository<Address, Long>{
List<Address> findBySex(String sex);
List<Address> findBySex(String sex, Sort sort);
List<Address> findBySexOrderByAgeDesc(String sex);
List<Address> findByAgeGreaterThan(int age);
List<Address> findByAgeGreaterThanEqual(int age);
List<Address> findByAgeLessThan(int age);
List<Address> findByAgeBetween(int low,int high);
List<Address> findByAgeGreaterThanAndSex(int age,String sex);
List<Address> findByAgeGreaterThanOrSex(int age,String sex);
List<Address> findByAgeIn(int age[]);
} |
JPQL을 사용한 집계처리
No Format |
---|
@Query("select new com.example.demo.data.AddressStatistics(t.address,AVG(t.age)) from Address t where t.age > :minage GROUP BY t.address HAVING AVG(t.age) > :filterage ") List<AddressStatistics> findRegionAvgage( @Param("minage") int minage, @Param("filterage") double filterage ); |
Native 쿼리
No Format |
---|
@Query(value="SELECT address,age,name,phoneNbr,sex FROM address " +
"UNION " +
"SELECT address,age,name,phoneNbr,sex FROM address2 ",
nativeQuery = true)
List<?> makeUniOn(); |
QueryDSL 지원이되는 저장소
Code Block | ||||
---|---|---|---|---|
| ||||
//인터페이스 선언부
public interface AddressRepoDSL extends JpaRepository<Address, Long>,
QueryDslPredicateExecutor<Address>{
}
//사용부
@Autowired
private AddressRepoDSL addressRepoDSL;
public void jpa_queryDslTest() {
QAddress userAddress = QAddress.address1;
BooleanBuilder builder = new BooleanBuilder();
builder.and(userAddress.name.eq("민수1") )
.and(userAddress.address.like("%" + "서" +"%"));
Iterable<Address> addressList = addressRepoDSL.findAll(builder);
addressList.forEach( item -> {
String itemString = String.format("%d%s %s %s %s %s",item.getId(),item.getName(),
item.getPhoneNbr(), item.getSex(),item.getAddress(),item.getAge());
System.out.println(itemString);
});
} |