옛날 강의라 maven 쓴다. 근데 얘는 설정법이 좀 복잡한듯.
java persistence api인 인터페이스를 구체화한 게 hibernate이다. 그럼 각 db에 따라 각 언어마다 다른 방언이 있는데 그걸 hibernate가 구체화 해준다.
나머진 별로 안중요한듯.
폴더 경로가 정해져 있어서 꼭 resources 바로 밑에 META-INF 밑에 persistence.xml로 파일명을 만들어야 한다. maven은 이걸로 db랑 연결한다.
엔티티를 만들긴 하지만 아직까지 실습 단계에선 테이블까진 만들어주진 않는듯. 테이블은 직접 db에 들어가서 create로 만들어준다.
그럼 할 준비가 됐는데, 방식은 엔티티 매니저를 만드는 애로 엔티티 매니저를 만드는데, 각 트랜잭션 마다 엔티티 메니저 하나씩 부여하고 그 엔티티 메니저가 트랜잭션을 만들어주고 삭제하는 방식으로 한다.
엔티티메니저 팩토리는 아까 META-INF/persistence.xml에서 정의한 persistence-unit 설정 정보 가지고 자신의 엔티티메니저 팩토리를 만든다. 이 팩토리는 처음에 로딩할 때, 앱 시작할 때 딱 한번 생성되고 이것만 가져다 쓸 거다. 트랜잭션이 필요할 때마다 이 팩토리에서 엔티티메니저를 만들고, 만들어진 엔티티메니저가 트랜잭션을 시작한다. 트랜젝션은 매우 중요하기 때문에 없으면 commit이 안되도록 만들어져있다.
sql없이 엔티티로 정의된 클래스 가지고 트랜잭션 안에서 수행하면 commit할 때 알아서 감지해서 sql문 짜준다. 실제로 db에 들어가 있다.
이제 알았으니 사실 try catch로 감싸서 에러를 방지하는게 안정적이다.
조회, 수정 및 삭제도 물론 가능하다. 여기서 jpa의 진가가 보이는데, 이 jpa의 목적은 sql 안의 내용을 자바의 객체처럼 다루고자 하는게 목적이기 때문에 엔티티 메니저에서 꺼낼 때 자바 클래스를 다루듯 수행하면 된다. 특히 자바 다루듯이 하려고 수정할 때 commit을 안해도 변경사항을 알아서 추적해서 만약 트랜잭션이 끝났을 때 변경사항이 있으면 알아서 바뀌도록 해놓았다.
삭제도 있다.
더 뭔가 구체적으로 조회하고 싶을 땐 JPQL을 사용하면 된다. sql문을 작성하는 듯 하지만 sql의 테이블 대신 자바 객체를 입력으로 받는다. 물론 실제 sql문으로 변환을 알아서 해주기 때문에 가능한 것.
이러면 그냥 sql문을 쓰는거랑 뭐가 다르냐 하겠지만 여러 db의 방언들도 자기가 알아서 처리해주는 hibernate를 사용하고 있다는 걸 잊지말자. 예시로 페이지네이션 같은 경우 db마다 문법이 다른데 이걸 조정해준다.
실제 db dialect를 바꿔서 해주면 그 db 문법(방언)에 맞춰서 다른 sql문으로 변환됨을 볼 수 있다.
'CS > 김영한 스프링 강의' 카테고리의 다른 글
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 섹션 4. 엔티티 매핑 (0) | 2023.09.17 |
---|---|
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 섹션 3. 영속성 관리 - 내부 동작 방식 (0) | 2023.09.15 |
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 섹션7. 웹 계층 개발 (0) | 2023.09.14 |
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 섹션6. 주문 도메인 개발 (1) | 2023.09.11 |
실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발 - 섹션5. 상품 도메인 개발 (0) | 2023.09.09 |