티스토리 뷰
JPQL 소개
기본 예제
새로운 프로젝트로 진행
초기 세팅 값
Address
@Embeddable
public class Address {
private String city;
private String street;
private String zipcode;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
}
Member
@Entity
public class Member {
@Id
@GeneratedValue
private Long id;
private String username;
private int age;
@ManyToOne
@JoinColumn(name = "TEAM_ID")
private Team team;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Team
@Entity
public class Team {
@Id
@GeneratedValue
private Long id;
private String name;
// 양방향으로 만들기
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>();
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;
}
}
Order
@Entity
@Table(name = "ORDERS")
public class Order {
@Id
@GeneratedValue
private Long id;
private int orderAmount;
@Embedded
private Address address;
// Order -> Product 단방향 매핑
@ManyToOne
@JoinColumn(name = "PRODUCT_ID")
private Product product;
}
Product
@Entity
public class Product {
@Id
@GeneratedValue
private Long id;
private Long name;
private int price;
private int stockAmount;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getName() {
return name;
}
public void setName(Long name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int getStockAmount() {
return stockAmount;
}
public void setStockAmount(int stockAmount) {
this.stockAmount = stockAmount;
}
}
JPQLMain
public class JpqlMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
tx.commit();
} catch (Exception e) {
tx.rollback();
e.printStackTrace();
} finally {
em.close();
}
emf.close();
}
}
JPQL 문법
- 사실상 SQL과 똑같다고 보는 것이 속 편하다.
설명
집합과 정렬
TypeQuery, Query
결과 조회 API
//이렇게 하면 반환이 타입 쿼리의 제네릭으로 들어간다.
TypedQuery<Member> query = em.createQuery("select m from Member m", Member.class);
List<Member> memberList = query.getResultList(); // 컬렉션이 반환 될 거야를 알려줌
for (Member member1 : memberList) { //출력하기
System.out.println("member1 = " + member1);
}
// 값이 무조건 하나라면, 단일 객체 반환
TypedQuery<Member> query = em.createQuery("select m from Member m where m.id = 10", Member.class);
Member singleResult = query.getSingleResult();
System.out.println("singleResult = " + singleResult);
파라미터 바인딩 - 이름 기준과 위치 기준
- 이름 기준만 쓴다. 위치 기준은 그냥 없다고 생각해라.
이름 기준 예시
TypedQuery<Member> query
= em.createQuery("select m from Member m where m.username = :username", Member.class);
query.setParameter("username", "member1");
Member singleResult = query.getSingleResult();
System.out.println("singleResult = " + singleResult.getUsername());
실행 창을 보면
결과 확인 가능.
그런데 실무에서는 이렇게 변거롭게 쓰지 않고, 메서드 체인으로 활용해서 한 번에 엮어서 정리한다.
Member result = em.createQuery("select m from Member m where m.username = :username", Member.class)
.setParameter("username", "member1")
.getSingleResult();
System.out.println("result = " + result.getUsername());
728x90
반응형
'[개발] - Spring > JPA 공부' 카테고리의 다른 글
ORM에 대한 궁금증과 오해 (3) | 2024.03.16 |
---|---|
실전 예제 6. 값 타입 매핑 (0) | 2023.08.28 |
값 타입 컬렉션 (0) | 2023.08.27 |
값 타입의 비교 (0) | 2023.08.27 |
값 타입과 불변 객체 (0) | 2023.08.26 |
Comments