MAC OS에 MySQL 설치하기
·
공부/기타
맥북에 MySQL 설치하기 내 맥북 정보 2019년도에 산 15인치 맥북 프로 인텔 CPU이다. MySQL 설치 홈페이지 접속 https://dev.mysql.com/downloads/ MySQL Community Server 클릭 애플 CPU면 제일 첫 번째꺼를 다운하면 된다. 인텔 CPU는 Select OS Version에서 macOS 12 (x86, 64-bit)를 선택 후 제일 첫 번째 파일을 다운하면 된다. finder에서 다운한 파일을 더블클릭 - 상자 모양이 또 새로운 창으로 나오면 상자 모양도 더블클릭하면 된다. 팝업 창이 뜨면 '허용' 계속 - 계속 - 동의 - 설치 - 지문인식 비밀번호 유형 선택 비밀번호 입력 - Finish - 지문인식 MySQL 설치 확인 시스템 환경 설정 맥북 좌..
JPA 객체지향 쿼리 언어(JPQL) - 벌크 연산
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 벌크 연산 벌크 연산 : 일반적으로 잘 알고있는 SQL의 UPDTAE, DELETE 재고가 10개 미만인 모든 상품의 가격을 10% 상승하려면? JPA 변경 감지 기능으로 실행하려면 너무 많은 SQL 실행 재고가 10개 미만인 상품을 리스트로 조회 상품 엔티티의 가격을 10% 증가 트랜잭션 커밋 시점에 변경감지 동작 변경된 데이터가 100건이라면 100번의 UPDATE SQL이 실행 예제 쿼리 한 번으로 여러 테이블 로우를 변경(엔티티) executeUpdate()의 결과는 영향받은 엔티티 수 반환 UPDATE, DELETE 지원 INSERT(insert into ...select, 하..
JPA 객체지향 쿼리 언어(JPQL) - Named 쿼리
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. Named 쿼리 정적 쿼리 미리 정의해서 이름을 부여해두고 사용하는 JPQL 정적 쿼리만 가능함 애노테이션, XML에 정의 애플리케이션 로딩 시점에 초기화 후 재사용 애플리케이션 로딩 시점에 쿼리를 검증 애노테이션 Member 클래스에 @NamedQuery 애노테이션을 추가해준다. name의 경우 Member를 붙여도 되고 안 붙여도 되지만 관례는 붙이는 것이므로 큰 이유가 없는 이상 붙이는 게 좋다. @NamedQuery( name = "Member.findByUsername", query = "select m from Member m where m.username = :usernam..
JPA 객체지향 쿼리 언어(JPQL) - 엔티티 직접 사용
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 엔티티 직접 사용 기본 키 값 JPQL에서 엔티티를 직접 사용하면 SQL에서 해당 엔티티의 기본 키 값을 사용 JPQL select count(m.id) from Member m // 엔티티의 아이디를 사용 select count(m) from Member m // 엔티티를 직접 사용 SQL(JPQL 둘 다 다음과 같은 SQL 실행) select count(m.id) as cnt from Member m 엔티티를 파라미터로 전달 String query = "select m From Member m where m = :member"; Member findMember = em.createQ..
JPA 객체지향 쿼리 언어(JPQL) - 다형성 쿼리
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 다형성 쿼리 조회 대상을 특정 자식으로 한정 ex) Item 중에 Book, Movie를 조회해라 JPQL select i from Item i where type(i) IN (Book, Movie) SQL select i from i where i.DTYPE in ('B', 'M') TREAT(JPA 2.1) 자바의 타입 캐스팅과 유사함 상속 구조에서 부모 타입을 특정 자식 타입으로 다룰 때 사용 FROM, WHERE, SELECT(하이버네이트 지원) 사용 ex) 부모인 Item과 자식 Book이 있다. JPQL select i from Item i where treat(i as Bo..
JPA 객체지향 쿼리 언어(JPQL) - 패치 조인(한계)
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 패치 조인(한계) 패치 조인의 특징과 한계 패치 조인 대상에는 별칭을 줄 수 없다. 하이버네이트는 가능하지만 가급적 사용하지 않는 것이 좋다. 패치 조인은 기본적으로 엔티티와 연관 된 데이터를 모두 가져온다. 그 중에 where절을 이용해 몇 개만 가져오고 싶을 때는 그냥 따로 조회하는 것이 좋다. 예를들면 1개의 팀과 연관된 회원이 5명이라고 치고, 그 중에 한 명만 불러오는 경우엔 잘못 조작하게 되면 나머지 4명이 누락되어 이상하게 동작할 수 있는 확률이 있다. 그리고 기본적으로 객체 그래프라는 것은 모든 데이터를 조회할 수 있어야하는게 정상이다. 그런데 일정 데이터만 걸러서 조회하..
JPA 객체지향 쿼리 언어(JPQL) - 패치 조인(기본)
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 패치(fetch) 조인 1 - 기본 정말 중요한 부분이므로 집중 필수! SQL 조인 종류가 아니고 JPQL의 기능 중 하나이다. JPQL에서 성능 최적화를 위해 제공하는 기능 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능이다. 두 번 쿼리가 나갈 것을 쿼리가 한 번만 나가도록 하는 기능. join fetch 명렁어 사용 패치 조인 ::= [LEFT [OUTER] | INNER] JOIN FETCH 조인경로 엔티티 패치 조인 회원을 조회하면서 연관된 팀도 함께 조회(SQL 한 번에) SQL을 보면 회원뿐만 아니라 팀(T.*)도 함께 SELECT JPQL select m f..
JPA 객체지향 쿼리 언어(JPQL) - 경로 표현식
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 경로 표현식 .(점)을 찍어 객체 그래프를 탐색하는 것 select m.username // 상태 필드 from Member m join m.team t // 단일 값 연관 필드 join m.orders o // 컬렉션 값 연관 필드 where t.name = "팀A" 위 세 가지 각자 내부적으로 동작하는 방식이 달라지므로 구분을 잘해서 이해해야 한다. 상태 필드(state field) : 단순히 값을 저장하기 위한 필드 연관 필드(association field) : 연관관계를 위한 필드 단일 값 연관 필드 : @ManyToOne, @OneToOne, 대상이 엔티티 컬렉션 값 연관 필..
JPA 객체지향 쿼리 언어(JPQL) - JPQL 함수
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. JPQL 함수 JPQL 기본 함수 JPQL이 제공하는 표준 함수이다. DB와 상관없이 그냥 사용하면 된다. CONCAT : 문자열을 이어주는(더하는) 함수 String query = "select concat('a', 'b') from Member m "; // 출력 로그 Hibernate: /* select concat('a', 'b') from Member m */ select ('a'||'b') as col_0_0_ from Member member0_ s = ab //** a와 b가 이어져서 출력된다. concat 같은 경우는 하이버네이트에서 || 으로도 지원한다. String ..
JPA 객체지향 쿼리 언어(JPQL) - 조건식(CASE 등)
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 조건식(CASE 등) 기본 CASE 식 select case when m.age = 60 then '경로요금' else '일반요금' end from Member m 기본 CASE 식은 컨디션에 대한 조건을 넣을 수 있는 CASE 식이다. 위의 예제를 인텔리제이에서 적어보면 아래와 같다. String query = "select " + "case when m.age = 60 then '경로요금' " + " else '일반요금' " + "end " + "from Member m"; List resultList = em.createQuery(query, String.class).getResu..
JPA 객체지향 쿼리 언어(JPQL) - JPQL 타입 표현과 기타식
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. JPQL 타입 표현과 기타식 JPQL 타입 표현 문자 : 'HELLO', 문자 내 싱글 쿼테이션(')을 표시하고 싶을 경우 싱글 쿼테이션을 두 개 써주면 된다. → 'She''s' 숫자 : 10L(Long), 10D(Double), 10F(Float) Boolean : TRUE, FALSE ENUM : jpabook.MemberType.Admin (패키지명 포함) 엔티티 타입 : TYPE(m) = Member (상속 관계에서 사용) 예제 String query = "select m.username, 'HELLO', TRUE from Member m"; 위와 같이 쿼리를 만들면 각각의 값..
JPA 객체지향 쿼리 언어(JPQL) - 서브 쿼리
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 서브 쿼리 일반적인 SQL에서의 서브쿼리와 똑같다. 나이가 평균보다 많은 회원 select m from Member m where m.age > (select avg(m2.age) from Member m2) 상위에서 조회한 Member m을 서브쿼리(괄호 부분)까지 끌고 오지 않았다. 이런 식으로 작성해야 성능에 더 좋으니 참고하자. 한 건이라도 주문한 고객 select m from Member m where (select count(o) from Order o where m = o.member) > 0 위 예제는 상위에서 조회한 Member m을 서브쿼리까지 끌고왔다. 이런 경우에는..
JPA 객체지향 쿼리 언어(JPQL) - 조인(JOIN)
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 조인(JOIN) 내부 조인(INNER JOIN) SELECT m FROM Member m [INNER] JOIN m.team t JPQL 조인은 엔티티 중심으로 동작을 한다. Member와 연관있는 Team을 m.team과 같이 점(.)으로 표현하고, 별칭을 t로 준다. 참고로 내부 조인은 Member는 있는데 team 데이터가 없을 경우에 Member만 나온다. // 실행 클래스 for(int i = 0; i < 100; i++) { Team team = new Team(); team.setName("teamA"); em.persist(team); Member member = new ..
JPA 객체지향 쿼리 언어(JPQL) - 페이징 API
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 페이징 API JPA는 페이징을 다음 두 API로 추상화한다. setFirstResult(int startPosition) : 조회 시작 위치 (0부터 시작) setMaxResult(int maxResult) : 조회할 데이터 수 setFirstResult()와 setMaxResult()는 다음과 같이 사용하면 된다. List result = em.createQuery("select m from Member m order by m.age desc", Member.class) .setFirstResult(0) .setMaxResults(10) .getResultList(); 그리고 테스트..
JPA 객체지향 쿼리 언어(JPQL) - 프로젝션(SELECT)
·
공부/JPA
JPA 게시글은 대부분 인프런의 김영한님의 강의인 '자바 ORM 표준 JPA 프로그래밍' 기반으로 내용을 정리했습니다. 프로젝션(SELECT) SELECT 절에 조회할 대상을 지정하는 것 프로젝션 대상 : 엔티티, 임베디드 타입, 스칼라 타입(숫자, 문자 등 기본 데이터 타입) SELECT m FROM Member m → 엔티티 프로젝션 Member member = new Member(); member.setUsername("member1"); member.setAge(10); em.persist(member); List result = em.createQuery("select m from Member m", Member.class) .getResultList(); 일반적인 조회 방법은 여태 써왔던 방식..