일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스프링공부
- 스프링부트공부
- querydsl
- Kafka
- 기술공부
- JPA스터디
- 스프링부트
- nestjs공부
- 자바공부
- 스프링 공부
- 카프카
- 스프링
- K8S
- JPA 공부
- JPA공부
- 코테준비
- 기술면접공부
- 플러터 공부
- 코테공부
- 프로그래머스
- 자료구조공부
- 알고리즘공부
- DDD
- Axon framework
- Flutter
- 플러터 개발
- nestjs스터디
- nestjs
- JPA
- JPA예제
- Today
- Total
목록JPA공부 (18)
DevBoi
RDB에서는 테이블 별로, 외래키를 매핑하며, 일대 다 혹은 다대다 의 형태를 가진다. 객체의 참조와, 외래키 매핑 관련되서 공부를 해보자 우선 간단한 예로, 팀과, 멤버에 대한 예제를 공부해보자 여러 사람이 한팀에 소속될 수 있다는 1:n관계라고 생각을 해보자 Member 에서는 Team에대한 관계와 조인 컬럼을 설정해준다. Team은 사실 별건없다. Lombok 을 사용해서 Getter,Setter도 직접 달아주었는데, 이건, 너무 불편해서 그냥 쓰기로했다 ㅋㅋ (매번 메소드 귀찮다) 이렇게 만 하면, 자동으로 PK,FK를 매핑해주는 테이블을 생성해준다. 예제 코드를 이렇게 작성해서 한번 테스트 해보자 뭐 잘들어간다. 추가로 위의소스에서 약간 수정한 내용은 PK가 id 자동생성 값일때는 String ..
1. 객체, 테이블 매핑 @Entity @Entity,가 붙으면, JPA에서 관리를 하는 클래스, 객체가 된다. 대부분 디폴트로, 객체이름과 테이블이름은 동일하게 따라가지만, 이런식으로 Table name을 붙이면, 해당 테이블이름으로 생성 및 관리가 된다. 밑에는 재부팅 후에, 확인된 내용이다. 현재는 테이블이 없어서, 한번 create ddl이 나갔고, 그 이후에는 재 기동 에도 create ddl이 나가지 않는다. 이렇게, 되는이유는 바로 이렇게 설정을 했기 떄문이다. update, create 등등이 있는데, create 는 재기동 될때마다, 새롭게 생성된다. 기존에 테이블이 있으면 drop , create를 하고 update로 설정하게 되면 없는 대상들만, 혹은 신규 컬럼만 새롭게 update한..
JPA는 느끼다싶이 객체를 넘겨서 대부분의 데이터작업을 진행한다. 그런데, 쿼리가 복잡하거나, 통계성쿼리가 필요하다면? 이건 객체로 푸는 것보다 쿼리로 푸는것이 맞다. 이때 JPA에서는 JPQL이라는 녀석으로 극복할수있게해준다. 근데, JPQL은 조금 다르다. 예를들어, MEMBER 테이블에서, 해당 대상을 전부 가져오는 걸 생각해보자 테이블 대상이라면, select * from member 뭐 이런식으로나, select id from member 이런식으로, 짠다. jpql도 역시 객체 지향쿼리여도 sql짜듯이 짜면된다. 강점은 언뜻 보기에 두가지 정도가있다. 1. 쿼리를 객체에 맞춰서 짜고, 방언에 따라, mysql,oracle등으로 자동 변환. 2. 페이징 관련 속성 set식으로, 자동 생성 쉽게 ..
Spring boot start app에서, JPA관련 CRUD 조회,생성 저장을 해보자 우선 테이블은 Entity를 사용하고, Pk는 컬럼 별로, Id를 달고, 테이블명이나 컬럼명은 다를 경우, 별도 어노테이션을 통해서 매핑 해주면된다. Member와 user에 대한 테이블 생성이 완료되었을 경우 CRUDrepository 라는 별도로 제공해주는 것을 상속받은 customRepo를 만들고, findAll(조회) save를 통해서,저장을 해본다. app이 실행할때, 해당 메소드가 돌기떄문에, 성공적으로 쿼리가 도는 것을 확인할수있다. 근데 여기서 문제, 데이터 베이스에서 find한 값을가져와서, 속성만 set을 해주면 자동 수정 저장이 될까? 이걸 한번 테스트 해보고싶었다. 특정 조건에 맞는 객체를 가져..
JPA를 개발하면서, N+1문제에 대한 얘기가 많이나온다. N+1이란 어떤걸까? 어떻게 해결해야할까? 우선 N+1 이란, 어떤 게시물의 테이블을 POST라고 두고, Post에 달린 댓글을 Comment라고 두자 한게시물에는 여러개의 댓글이 달릴것이고, 우리는 이것을 @OnetoMany로 둔다. 자 그러면, 페이징을 뿌릴때나, 특정조건에 Post테이블을 findAll해본다고하자 우선, 그전에 JPA에서는 각각의 fetch방법이 존재한다. fetch란 뭘까? fetch란 특정 한개의 Entity 즉 테이블을 조회할때, 연관관계에 있는 객체들을 어떻게 가져올까? 라는 전략이다. 해당 전략은 크게 Eager, Lazy가 있다. Eager은 연관관계에 있는 Entity를 모두 가져오고 Lazy는 getter로 접..
JPA 설정이 기초적인 부분이 완료되었다. 이제 Entity를 생성하고, 재 부팅 해보자. JPA는 객체 지향적 ORM 방식으로 개발할수있도록 도와주는 api중하나이다. 개발자가 쿼리보다는 객체에 신경을 쓸수있도록 도와주고, 충분한 학습이 뒷받침 되면, 아주 좋은 성능을 낸다고한다. 이런식으로 id를 pk로 주고, 재부팅한다, 이렇게 자동적으로 sql에서 생성을 하게된다. ddl-auto 가 update이기때문에, 해당 컬럼을 추가하게 되면 이렇게 반영이된다. @Table , Entity 가 기본적으로 이름이 동일한 테이블을 생성 및 찾지만, 특정 테이블 이름과 매핑할수도있다. @Column(name ="???") 동일한 이름이 아닌, 특정 컬럼이름으로 할수있다. 예) 아 우선 그전에, 자동 재기동을 a..
h2로, 간략하게테스트 할수도있지만 h2는 단순 테스트 용이니니까 실제 db를 사용해서 테스트를 해보자 우선 저번에 db 연결 및 , 스키마 생성(db1까지 완료했다.) 이제 스프링 쪽 설정 파일을 변경해주어야 한다. 우선 이런식으로 yaml파일을 수정해준다. 1. database-platform : mysql 이나 마리아 오로라 등등을 선택해준다. 그리고 dialect에 대한 설정이 있는데, 이건 방언이라고 하는데, db와 쿼리가 각자 달라서, 다른 경우에도 ORM이 되도록 설정해주는 것이다. 2. show-sql : sql 로깅, debug처럼 출력이된다. 3.open-in-view : 영속성 관계를 보장해준다. service ~ repo 까지의 관계에서 해당 트랜잭션을 보장해준다. 쉽게 말해서, 트..
JPA에 대해서 많이들 언급하고있다 이직을 하거나, 공부를 하거나 등등 다양하게 스프링 관련 개발을 하게 되면 듣게 되는 용어이다. JPA대충감은 오지만, 확실히 모르면 확실히 알고가자 1. JPA 란 무엇일까 JPA란 흔히 , SQL과, 자바단을 묶어주는 , 객체 관계 매핑의 가장 표준적인 기술이다. 우리가 JAVA에서 객체를 넘겨주고, sql에서는 이 전달 받은 객체를 받아서, 매핑 해서 파라미터를 활용하여 insert나 select를 하게 된다. 2. JPA는 그래서 뭐임? 어케 쓰는거임?? JPA는 개발자가 사용하는 라이브러리가 아니다. 이렇게 애플리케이션 단과 JDBC 사이에 있기 떄문에, DB와 통신할때 객체를 매핑해주는 api라고 이해하면된다. 3. 그러면 JPA를 왜 사용해야할까???뭐가 ..