일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- autocomplete
- tomcat
- Mockito #Reflection #Sigleton #Test #JUnit
- LiveTemplate
- 톰캣
- spring
- 디자인패턴 #싱글톤
- Spring Framework
- 외장톰캣
- Today
- Total
목록Develop/JPA (31)
자라선
1. JPQL과 영속성 컨텍스트 JPQL은 쿼리로 만들어 SELECT 절에 다양한 컬럼을 추가하여 조회하게 된다. 엔티티, 임베디드, 값 타입과 같이 다양한 종류가 있지만 JPA의 영속성 컨텍스트는 엔티티 단위로만 관리가 된다. 그렇기 때문에 JPQL로 DB 조회시 엔티티 타입만 영속성 컨텍스트에 관리가 된다. String entity = "select m from Member m"; // 엔티티 타입 (관리 O) String embedded = "select o.address from Order o"; // 임베디드 타입 (관리 X) String value = "select m.id, m.username from Member m"; // 단순 필드 조회 (관리 X) 2. JPQL 쿼리 조회 방법 일반적..
1. Native SQL JPQL은 표준 SQL로 지원해서 특정 DB에 종속적이진 않지만 이 때문에 특정 DB의 기능을 사용하지 못하게 된다. 그래서 NativeSQL을 지원하여 이러한 문제점을 해결해준다. - 특정 DB만 지원하는 함수나 문법, SQL의 쿼리 힌트 - 인라인 뷰(From 절에 서브쿼리), UNION, INRTERSECT 등 - 프로시저 String sql = "SELECT id, age, username, members FROM Member WHERE age > ?"; final Query query = em.createNativeQuery(sql, Member.class).setParameter(1, 20); query.getResultList(); NativeSQL를 사용한 코드인데..
1. UPDATE, DELETE UPDATE와 DELETE 를 지원하지만 영속성 컨텍스트를 거치지 않고 바로 DB로 쿼리를 보내버리기 때문에 주의가 필요하다. QItem item = QItem.item; // UPDATE 쿼리 JPAUpdateClause updateClause = new JPAUpdateClause(em, item); long uptCount = updateClause.where(item.name.eq("네임")) .set(item.price, item.price.add(100)) // price + 100 시킴 .execute(); // DELETE 쿼리 JPADeleteClause deleteClause = new JPADeleteClause(em, item); long delCou..
예시로 사용된 엔티티 더보기 @Entity public class Item { @Id @GeneratedValue @Column(name = "ITEM_ID") private Long id; private String name; //이름 private int price; //가격 private int stockQuantity; //재고수량 //Getter, Setter public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int get..

1. QueryDSL 이란 쿼리를 생성하는 방법 중 직접 자바 소스상 SQL를 작성하여 구현하는 JPQL 방식도 있지만 컴파일 단계에서 오류를 검증하지 못한다는 단점이 있다. 이를 보완하기 위해 JPA는 Criteria Query 라이브러리와 QueryDSL 라이브러리를 사용하여 컴파일 단계에서 쿼리의 오류를 검증할 수 있고 IDE의 자동완성의 기능으로 구현할 수 있다. 그런데 Criteria 라이브러리는 가독성과 작성이 너무 어렵고 복잡하여.. 책에선 나와있지만 생략했다.. 대신 QueryDSL를 비교적 많이 사용한다길래 작성한다. QueryDSL은 오픈소스 프로젝트이며 데이터를 조회하는데 있어 기능이 특화되어있다. 2. 환경설정 pom.xml ... com.mysema.querydsl querydsl..
1. 엔티티를 조건으로 사용 // Team 테이블에서 PK값 0 를 조회 final Team team = em.find(Team.class, 0l); // Team PK 0를 사용하여 Member FK 로 조회한다. String jpql = "select m from Member m where m.team = :team"; final List resultList = em.createQuery(jpql, Member.class) .setParameter("team", team) .getResultList(); JPQL에서 조건절에서 Member의 Team 필드로 걸어두었지만 파라미터로는 Team 엔티티가 그대로 들어가는데 이런 경우 JPQL에서는 자동으로 Team 엔티티의 PK로 뽑아 SQL로 변환시킨다...
더보기 @Data @Entity public class Team { @Id // @GeneratedValue private long id; private String name; @OneToMany(mappedBy = "team") private List members = new ArrayList(); } @Data @Entity public class Member { @Id @GeneratedValue private long id; private String username; private int age; @ManyToOne @JoinColumn(name = "members") private Team team; @OneToMany(mappedBy = "member") private List orders ..
사용된 예시 엔티티 더보기 @Data @Entity public class Team { @Id @Column(name = "TEAM_ID", nullable = false) @GeneratedValue private int id; @Column(name = "TEAM_NAME") private String name; @OneToMany(mappedBy = "team") private List members = new ArrayList(); } @Data @Entity public class Member { @Id @Column(name = "MEMBER_ID", nullable = false) @GeneratedValue private int id; @Column(name = "USER_NAME") pr..
예시로 사용될 엔티티 더보기 @Data @Entity public class Member { @Id @GeneratedValue private long id; private String username; private int age; @ManyToOne @JoinColumn(name = "members") private Team team; @OneToMany(mappedBy = "member") private List orders = new ArrayList(); } @Data @Entity public class Team { @Id @GeneratedValue private long id; private String name; @OneToMany(mappedBy = "team") private List..
JPA는 엔티티를 사용하여 데이터들을 관리한다. 하지만 필드값으로 조건을 부여하는 이러한 방법 이외에도 다양한 조건을 통해 데이터를 조회해야하는데 이러면 한계가 있기 때문에 JPA는 JPQL, Native 등 다양한 조회방법을 제공해준다. final Member member = em.find(Member.class, "ID"); 1. JPQL JPQL은 기존의 SQL를 작성하여 SELECT 하는 방식과 동일한데 다른점이라고 한다면 엔티티를 기준으로 SQL를 작성한다. 또한 데이터베이스마다 쿼리의 방언이 다 다르며 사용하는 함수가 다르기 때문에 이를 보완 해준다. @Data @Entity public class Member { @Id @GeneratedValue private long id; @Column..