해당 수업은 김영한님의 JPA 수업을 통해 작성되었으며 약간의 저의 생각이나 추가적으로 제가 궁금했던 내용을 더 적었다는 사실을 밝힙니다.
💡 JPA의 구동 방식
이번 수업은 Spring을 사용하지 않는 과정입니다. 때문에 boot로 편하게 진행할 수 있는 부분을 굳이 작성하는 것을 이해해주세요
- Persistence.xml
- DB 설정 정보를 작성한다
- EntityManagerFactory
- 애플리케이션에서 단 한번만 생성하고 전체에서 공유한다
이때 Unit-name을 꼭 맞춰주어야 한다.
- 애플리케이션에서 단 한번만 생성하고 전체에서 공유한다
- EntityManager
- DB 커넥션 풀과 같은 기능을 지니고 있는 것이다.
- DB와 밀접한 관계가 있기때문에 Thread 간 공유가 안되고 사용이 끝나면 꼭 close()를 해주어야 한다
- ★ JPA의 모든 데이터 변경은 트랜잭션 안에서 실행된다
🖊 Persistence.xml
JPA는 Persistence를 생성하게 된다. properties에도 넣는 정보 같은것이다. 어느 DB와 연결할 것인가 어떻게 연결할 것인가 등등의 예로 말이다. 밑의 사진은 maven으로써 persistence.xml로 연결한 파일이다.
그렇다면 이제 해당 파일을 읽어서 EntityManagerFactory라는 클래스를 생성한다. 그리고 필요시에 EntityManager를 찍어내면서 연결하는 것이다.
🖊 Code
Main
Main 클래스에 Persistence를 통해 연결하고 Manager를 통해 만들고 또 다시 닫아주는 작업이 필요하다.
Entity
어노테이션 @Entity 와 @Id 가 중요하다.
- @Entity : 해당 객체가 테이블이 될 것이다.
- @Id : primary key 로 사용할 것이다.
Member를 저장하는 코드
이런식으로 코드를 작성하는게 대부분인데 의외로 저장이 되지 않는다. 그 이유는 트랜잭션의 문제가 되는데 이것이 매우매우 중요하다. 그래서 transaction을 열어주어야 하는데 그것을 코드로 작성해보면
이처럼 적게 된다. 그렇다면 H2 데이터 베이스에 잘 저장이 된다는 것을 알수 있다. transaction을 열어주는 것도 좋지만 commit()을 통해 마침표를 찍어주는 것 또한 매우 중요하다.
그후에 확인해보면 잘되어있는 것을 확인해볼수 있다.
🖊 심화 코드
위에서 살펴본 코드에서 member가 잘 저장되는 것을 알수 있지만 만약 저장하는 과정에 문제가 생기면 밑의 닫아주는 코드까지 문제가 생긴다는 것을 알 수 있다. 하지만 저장에 문제보다 닫히는 코드에 문제가 생기는 것은 매우 안좋은 일이다. 때문에 그것을 해결 해주기 위해 try-catch문을 사용하게 되는데 이것이 정석의 코드가 된다.
💡 조회, 삭제, 수정
🖊 조회
앞서 우리는 저장에 대한 내용을 알아보았다 이제 조회를 볼건데 조회는 간단하다. find메소드를 사용하여 어떤 사용자를 찾고자 하는지 알아보고 어떤 클래스의 내용을 가져올 것인지 확인해볼수 있다.
그렇다면 이런식으로 잘 가져오는 것을 확인해볼 수 있다.
🖊 삭제
역시 간단하다. 찾은 아이를 em의 remove 메소드를 통해 삭제하면 된다.
🖊 수정
사실 중요한 것은 수정이다. 이또한 찾은 멤버에서 수정하게 되는데 코드를 먼저 알아보자
우리의 상식으로는 불러온 데이터를 수정한 후에 DB에 다시 저장하는 persistence가 있어야 할 것 같은데 없다. 왜냐하면 쿼리문에서 자동으로 update를 진행하기 때문이다.
왜 그런것일까
- JPA를 통해 가져온 데이터는 JPA가 관리를 하게 되고 commit 하는 시점에 데이터를 검사한다.
- 만약 뭔가가 바뀌었다면 스스로 업데이트를 진행하고 커밋을 진행하게 되는 아주 똑똑한 아이다.
'Spring > 🌵 JPA' 카테고리의 다른 글
🌵 플러시(flush) (0) | 2023.09.19 |
---|---|
🌵 JPA의 영속성(feat.준영속상태) (0) | 2023.09.18 |
🌵 JPA(feat. ORM) (0) | 2023.09.16 |