분류 전체보기
-
JPA (10) - JPQL 경로 표현식, Fetch join카테고리 없음 2024. 1. 12. 14:20
1. 경로 표현식 > .을 찍어서 객체 그래프 탐색하는 것 의미 //연관관계에 따라 단일 값, 컬렉션값 연관 필드 SELECT m.username // 상태 필드 FROM Member m join m.team t //단일 값 연관 필드 join m.orders o //컬렉션값 연관 필드 where t.name = '팀A' > 상태 필드 : 단순히 값을 저장하기 위한 필드 > 연관필드 : 연관관계를 위한 필드 (단일,컬렉션) 1.1 경로 표현식 특징 > 상태필드 : 경로탐색 끝 > 단일값 연관 경로 : 묵시적 내부 조인 발 //단일 값 연관 경로 String query = "select m.team from Member m"; //묵시적 내부조인 발생 (하지마라!) String query = "select..
-
JPA (9) - JPQL (기본문법)카테고리 없음 2024. 1. 12. 12:13
> jpql은 단순하게 조회가 가능하고, 객체 그래프 탐색으로 쿼리를 날릴 수 있다는 장점이 있다! > JPA는 엔티티 객체 중심 개발이므로, SQL또한 테이블이 아닌 엔티티 객체를 대상으로 검색하도록 돕는다. > SQL을 추상화했다. (문법 매우 유사하다) -> JPQL은 엔티티 객체를 대상으로 쿼리를 한다. *모든 DB 데이터를 객체로 변환하는 것은 불가능하다 -> 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요하다. String jpql = "select m From Member m where m.name like '%hello%'"; List result = em.createQuery(jpql, Member.class).getResultList(); 1. JPQL 기본 ..
-
배열자료구조와 알고리즘/문제풀기 2024. 1. 12. 10:07
-> 다시 도전 (물방울 가두기, 자신을 제외한 곱셈, 3더하기) -> 투포인터로 문제 해결하는 방식 조금 배웠다 (물방울 가두기,3더하기..) -> 중복값 계산하기 귀찮으면 Map에다가 key로 때려 박으면 쫌 다루기 쉬울 때가 있다. -> map.containsKey, Arrays.asList, new ArrayList(map.values()) 야무지게 외워둡시다. > 물방울 가두기 (리트코드 - 42) 1. 내 풀이(3ms) public int trap(int[] height) { int maxHeight = Arrays.stream(height).max().getAsInt(); int rainWidth=0; int left = 0; int right = height.length - 1; int l..
-
JPA (8) - 값 타입과 값 타입 컬렉션카테고리 없음 2024. 1. 11. 17:53
- JPA에서는 Entity타입과, 값타입 존재 - > @Entity로 정의하는 객체, 데이터가 변해도 식별자로 지속해서 추적 가능 (회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식가능) -> 기본 값 타입 : int,Integer,String 1. 기본값 타입 > 기본 값 타입 : 자바 기본 타입, 래퍼 클래스, String, 임베디드 타입, 컬렉션 타입 1.1 기본 값 타입 > 생명주기 엔티티 의존, 값타입은 공유해선 안된다 (회원 변경시 다른 회원 이름도 함께 변경되거나 이런거 조심) > 자바 기본 타입은 어차피 공유 발가능함 (래퍼나 String등 특수 클래스도 객체라서 공유가능할 것 같지만 안됨) > List같은거 운용할 때 조심하자 1.2 임베디드 타입 (복합 값 타입) > 새로운 값 타..
-
JPA (7) - 프록시,고아객체,전이카테고리 없음 2024. 1. 11. 16:25
1. 프록시 > 다대일 관계에서 Member를 조회할 때 꼭 Team이 필요한가? > 필요한 객체만 조회하고 싶음! (그냥 조회하면 join해야해서 구리다) //회원과 팀 모두 조회 public void printUserAndTeam(String memberId) { Member member = em.find(Member.class, memberId); Team team = member.getTeam(); } //회원만 조회 public void printUser(String memberId) { Member member = em.find(Member.class, memberId); Team team = member.getTeam(); } 1.2 em.find() vs em.getReference() >..
-
JPA(6) - 상속관계매핑,MappedSuperclass카테고리 없음 2024. 1. 11. 15:22
- 관계형 데이터베이스는 상속 관계 없음 - 슈퍼타입, 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. -> 상속관계 매핑은 객체의 상속구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것 1. 상속관계 매핑 - 슈퍼타입 서브타입 논리모델을 실제 물리 모델로 구현하는 방법 - > 각각 테이블로 변환 : 조인전략 - > 통합 테이블로 변환 : 단일 테이블 전략 - > 서브타입 테이블로 변환 : 구현 클래스별 테이블 전략 @Inheritance(stratrgy=inheritanceType.XXX) // JOINED : 조인전략 // SINFLE_TABLE : 단일 테이블 // TABLE_PER_CLASS : 구현 클래스별 테이블 전략 @DiscriminatorColumn(name="DTYPE") //부..
-
JPA (5) - 연관 관계 매핑 (다대일,일대다,일대일,다대다)카테고리 없음 2024. 1. 11. 14:45
-> 관계를 왼쪽 테이블 기준으로 볼 것이다. 1. 다대일 1.1 다대일 단방향 - 가장 많이 사용하는 연관관계 - 다대일의 반대가 일대다 1.2 다대일 양방향 - 외래키가 있는 쪽이 연관관계의 주인 - 양쪽을 서로 참조하도록 개발 - 먼저 다대일 단방향을 했다가, 필요에 의해 양방향 전환 고려 2. 일대다 2.1 일대다 단방향 @Entity public class Team{ @Id @GeneratedValue private Long id; private String name; @OneToMany @JoinColumn(name ="TEAM_ID") List members = new ArrayList(); } - 일이 연관관계의 주인이다. (JoinColumn이 member한테 먹음) - 객체와 테이블의 ..
-
JPA (4) - 연관 관계 매핑 (양방향,단방향)카테고리 없음 2024. 1. 11. 12:47
> 기본 용어 방향 : 양방향, 단방향 (객체에만 존재 참조가 양쪽에 있는지 한쪽에만 있는지) > 다중성 : 다대일,일대다,일대일,다대다 > 연관관계의 주인 : 객체 양방향 연관관계에서 주인이 필요하다 (외래키 관리 -> 변경시 DB에 반영될 객체) 1. 연관관계가 필요한 이유 엔티티를 테이블에 맞추어 설계시 아래와 같음 @Entity public class Member{ @Id @GeneratedValue private Long id; @Column(name="USERNAME") private String name; @Cloumn(name="TEAM_ID") private Long teamId; } - 참조 대신 외래키를 직접 저장해서 사용함 Team team = new Team(); team.setN..