[Spring_Boot] JPA Entity , JPQL

최현석·2022년 12월 4일
0

Spring_Boot

목록 보기
18/31
post-thumbnail

🧩 Example Source - Entity

Member

  • 객체와 테이블을 생성하고 매핑하기
  • @Entity : JPA에서 해당 객체를 관리하겠다는 어노테이션
  • @Id : 데이터베이스 PK와 매핑 할 값
  • @Column : 해당 필드가 DB에서 쓰일 때 적용되는 속성들
  • 아래 코드 DB 해석
    create table Member(
    id number primary key,
    name varchar(200)
    );
@Entity
@Getter @Setter
public class Member {
	
	@Id
	private Long id;
	
	private String name;
	
	
}

🧩 Example Source - Transaction

JpaMain

public class JpaMain {

	public static void main(String[] args) {
		// xml 설정파일 이름 <persistence-unit name="hello">
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
		EntityManager em = emf.createEntityManager();
		
		// transaction 발생
		EntityTransaction tx = em.getTransaction();
		tx.begin();
		
		try {
			// JPQL
			// JPA는 쿼리를 짤떄 Table을 대상으로 쿼리를 짜지 않고,
			// member 객체를 통해서 쿼리를 짠다.
			List<Member> result = em.createQuery("select m from Member as m", Member.class)
						.setFirstResult(5)	// 5번 부터
						.setMaxResults(10)	// 10개 까지 가져온다
						.getResultList();
			
			for(Member member : result) {
				System.out.println("member.name = " + member.getName());
				
			}
            
			// JPA
//			// 회원 조회
//			Member findMember = em.find(Member.class, 2L);
//			System.out.println("==================================");
//			System.out.println("findMember.id : " + findMember.getId());
//			System.out.println("findMember.name : " + findMember.getName());
			
			// 회원 수정
//			findMember.setName("UpdateUser");
			
			// 회원 삭제
//			em.remove(findMember);
			
			
			// 회원 등록
			Member member = new Member();
			
			// 추가
			member.setId(3L);
			member.setName("UserC");
			
			// persist : db에 저장
			em.persist(member);
		
			tx.commit();
		}catch (Exception e) {
			tx.rollback();
		}finally {
			em.close();
			emf.close();
		}
	}
}

🧩Entity의 기본적인 CRUD

저장 : persist()
조회: find()
삭제: remove()
변경: 변경은 따로 함수를 호출하기보다는 find를 해서 가져온 객체에서 setter 메서드를 통해 값을 변경하면 commit()호출시 적용되기 전 시스템에서 변경감지를 통해 기존 객체와 차이점을 찾아서 업데이트를 자동으로 해준다.

🧩 JPQL

  • 일반 쿼리와는 다르게 From절의 Member는 테이블이아닌 엔티티(Member.class)를 대상으로 한다.
  • 각 DB의 방언에따라 JPA가 자동으로 맞춰준다.
  • ansi가 제공하는 표준 SQL 문법을 모두 제공한다.
			// JPQL
			// JPA는 쿼리를 짤떄 Table을 대상으로 쿼리를 짜지 않고,
			// member 객체를 통해서 쿼리를 짠다.
            // 회원조회
			List<Member> result = em.createQuery("select m from Member as m", Member.class)
           				 //페이징 처리에 대한 부분이 된다.
						.setFirstResult(5)	// 5번 부터
						.setMaxResults(10)	// 10개  가져온다 
						.getResultList();
			
			for(Member member : result) {
				System.out.println("member.name = " + member.getName());
  • JPA를 사용하면 객체를 중심으로 개발
  • 문제는 검색 쿼리 -> 검색을 할때도 테이블이 아닌 엔티티 객체를 대상으로 검색
  • 모든 DB데이터를 객체로 변환해서 검색하는 것은 불가능
  • 검색 조건이 포함된 SQL이 필요
  • JPA는 SQL문을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공
  • SQL과 문법이 유사, select, from, where, group by, having, join 지원
  • SQL : 데이터베이스 테이블을 대상으로 쿼리
  • JPQL : 객체를 대상으로 쿼리 (JPA에서 사용하는 쿼리문)

0개의 댓글