목록Tech (49)
지나공 : 지식을 나누는 공간
이동욱님의 '스프링부트와 AWS로 혼자 구현하는 웹서비스'를 읽고 기록하고 싶은 내용을 정리했다. JPA는 jpa 카테고리에서 자세하게 다루었으므로 기억하고 싶은 내용만 간단히 적을 예정이다. 1. 주요 어노테이션을 클래스에 가깝게 쓰자 한 클래스에 어노테이션을 여러 개 쓰는 경우가 많다. 그럴 때 순서는 중요할 수록 클래스명에 가깝게 쓰자. @Getter와 같은 롬복 어노테이션은 코드를 단순화시키지만 필수 어노테이션은 아니다. 따라서 @Entity를 클래스에 가깝게 두자. 2. Entity 클래스에서는 절대 setter 메소드를 만들지 말자 현재 위에 첨부한 사진에는 Getter만 있고 Setter는 없다. 무작정 getter/setter를 생성하면 해당 클래스의 인스턴스 값들이 언제 어디서 변해야 하..
이동욱 님의 '스프링 부트와 AWS로 혼자 구현하는 웹서비스'를 읽고 기록하고 싶은 내용을 적은 글입니다. 1. 코드 외 패키지명은 주로 웹사이트 주소의 역순으로 한다. 절대 수동으로 검증하고 테스트 코드를 작성하지 않는다. 테스트 코드로 먼저 검증한 뒤 정말 못 믿겠다 싶을 때 프로젝트를 실행해서 확인한다. 2. 메인 클래스 코드 작성하기 Application 클래스는 앞으로 만들 프로젝트의 메인 클래스이다. @SpringBootApplication 스프링부트가 자동설정되게 하는 어노테이션. 스프링 Bean 읽기와 생성을 모두 자동으로 설정한다. 특히, 이 어노테이션이 있는 위치부터 설정을 읽어가므로 이 어노테이션은 항상 프로젝트의 최상단에 위치해야 한다. SpringApplication.run() m..
JPQL 타입 표현 문자 : 'HI', 'He''s' -> ' '안에 (')을 넣어야 할 때는 작은 따옴표 두 개 사용해서 표현 숫자 : 10L(Long), 10D(Double), 10F(Float) Boolean : true, false enum : 패키지명을 모두 포함해서 적어야 함. public enum MemberType{ ADMIN, USER; } public class Member{ @Enumerated(EnumType.STRING) private MemberType type; //기본이 EnumType.ORDINAL이므로 항상 STRING으로 변경해주어야 함 } String query = "select m.username from Member m " + "where m.type = jpql...
오늘 알아볼 내용은, 조인의 종류 조인쿼리 실행하기 ON절 조회 대상 필터링 (조인을 하되 조건을 걸고 부합하는 것만 조인) 연관관계 없는 엔티티 조인 서브쿼리 (중요) JPA 서브쿼리의 한계 조인의 종류 내부 조인 SELECT m FROM Member m [INNER] JOIN m.team t (inner는 생략 가능) 외부 조인 SELECT m FROM Member m LEFT [OUTER] JOIN m.team t (outer는 생략 가능) 세타 조인 ( 연관관계가 전혀 없는것을 비교해보는조인) select count(m) from Member , Team t where m.username = t.name 조인 쿼리 실행하기 Team과 Member가 연관관계를 가진 상태라고 하면 아래와 같이 조인 ..
이번에 다룰 내용은, 프로젝션과 영속성컨텍스트 관리여부 여러 필드의 값을 조회하는 방법 세 가지 페이징 프로젝션이란? SELECT 절에 조회할 대상을 지정하는 것 프로젝션 대상 : 엔티티, 임베디드 타입, 스칼라 타입(숫자, 문자 등 기본 데이터 타입) 예시 SELECT m FROM Member m -> 엔티티를 조회하니까 엔티티 프로젝션 SELECT m.team FROM Member m -> 엔티티 프로젝션 (멤버에 연관된 팀 엔티티를 가져오니까) SELECT m.address FROM Member m -> 임베디드 타입 프로젝션 SELECT m.username, m.age FROM Member m -> 스칼라 타입 프로젝션 DISTINCT로 중복 제거 영속성 컨텍스트에 관리되는가? em.flush()..
이건 개인적으로 잘 몰랐던 부분만 기록할 예정. JPQL 문법의 특징 select m from Member as m where m.age > 18 엔티티와 속성은 대소문자를 구분한다. JPQL 키워드는 대소문자 구분을 하지 않는다. select, from where 등은 대소문자 다 가능 엔티티 이름을 사용한다. 테이블 이름을 사용하지 않는다. 별칭은 필수이고 as는 생략 가능하다. hibernate는 별칭 안 써도 가능은 한데 본래 문법은 별칭 필수다. 클래스 이름이 똑같다면...클래스 이름을 바꾸는 게 안 헷갈리고 낫습니다... @Entity(name = "MM") public class Member{ @Id @GeneratedValue private Long id; } 위의 코드에서 엔티티 이름은 ..
여기서 알아볼 내용은, 값 타입 컬렉션 사용하는 예제 : 저장, 조회, 수정 등 값 타입 컬렉션 주의사항 실무에서의 사용법 팁 값 타입 컬렉션은 언제 쓰는지 JPA 타입 정리 문제상황 Member처럼 컬렉션을 가지면 1대 다 관계를 유지하지만 DB 테이블은 특성 상 한 객체가 컬렉션을 가지는 것을 구현하기 어렵다. 그래서 Member에 Favorite Food가 있다면 이걸 별도의 테이블로 보관해야 한다. 그래야 관리할 수 있다. 일단 매핑을 해보자. 값 타입 매핑은 @ElementCollection으로 해야 하고, 테이블명 정하는 건 CollectionTable에서 name을 통해 할 수 있다. MEMBER_ID를 가지고 JOIN하겠다는 의미이다. 값 타입 컬렉션 값 타입을 하나 이상 저장할 때 사용하..
(JPA7에 이어지는 내용) 이번에 알아볼 내용은, 값 타입의 공유 참조와 그 부작용 공유 참조 시 부작용 피하기 객체 타입의 한계 불변 객체 값 타입의 비교 값 타입 공유 참조 임베디드 타입과 같은 값 타입을 여러 엔티티에서 공유하면 위험하다. (부작용 발생) 부작용 주의! Address address = new Address("city","street","10000"); //member1 생성 Member member1 = new Member(); member1.setAddress(address); em.persist(member1); //member2 생성 Member member2 = new Member(); member2.setAddress(address); em.persist(member2);..
이번에 알아볼 내용은, 기본값 타입과 값 타입의 분류 임베디드 타입(복합 값 타입) - > 중요 임베디드 타입의 활용 임베디드 타입의 중복 해결 임베디드 타입과 null JPA의 데이터 타입 분류 [엔티티 타입] Entity로 정의하는 객체 내부 데이터가 변해도 식별자로 지속해서 추적 가능 예) 회원 엔티티의 이름, 나이를 변경해도 id100번이면 id를 보고 이 엔티티를 인식할 수 있다. [값 타입] int, Integer, String 같은 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없이 값만 있으므로 변경되면 추적 불가능 값 타입의 분류 임베디드 타입 : X좌표, Y좌표를 한 번에 사용하고자 묶어서 '위치'로 사용하고 싶을 때 사용. 컬렉션 값 타입 : 임베디드 타입이나 값 타입을 자..
이번 포스팅에서 공부할 내용은! ->영속성 전이 (CASCADE) : 정의, 주의점, 종류 ->고아 객체 : 정의, 주의 -> (영속성 전이 + 고아 객체)와 생명주기 영속성 전이란? (CASCADE) 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속 상태로 만들고 싶은 경우에 사용합니다. 예를 들어 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장하거나, 부모 엔티티를 삭제할 때 관련된 자식엔티티도 함께 삭제하고 싶을 때 사용합니다. 영속성 전이 : 저장 (PERSIST) 아래의 예시를 봅시다. 현재 Parent와 Child는 1:N 연관관계 (@OneToMany, @ManyToOne 사용)를 가진 상태입니다. public class JpaMain(){ public static void m..