본문 바로가기
728x90

[JAVA]88

JPQL - fetch join ferch join SQL 조인의 종류가 아니다. JPQL에서 성능 최적화를 위해 제공하는 기능이다. 연관된 엔티티나 컬렉션을 SQL 쿼리 한 번으로 함께 조회할 수 있는 기능이다. join fetch라는 명령어를 사용한다. -- JPQL select m from Member m join fetch m.team -- SQL SELECT M.*, T.* FROM MEMBER M INNER JOIN TEAM T ON M.TEAM_ID = T.ID 컬렉션의 fetch join 일대다 관계의 컬렉션 fetch join의 경우 데이터가 뻥튀기될 수 있다. -- JQPL select t from Team t join fetch t.members where t.name = '팀A' -- SQL SELECT T.*, .. 2023. 5. 13.
Jar, War, Ear에 대한 정리 JAR(Java ARchive) Java 프로그램의 실행에 필요한 클래스 파일이나 설정 파일이 정리되어 있는 아카이브이다. Java로 작성한 어플리케이션을 배포할 때 관련 파일을 한 번에 패키징 할 때 쓰인다. 많은 클래스 라이브러리가 이 형식으로 배포되고 있다. 클래스 파일과 각 클래스들이 사용하는 관련 리소스 파일, 메타 데이터를 압축한다. 실제로는 zip 파일 포맷으로 압축된다. 내장 서버 사용에 최적화되어 있다. JRE(Java Runtime Environment)가 있으면 실행된다. java -jar {project_name}.jar WAR(Web application ARchive) Java의 Web 어플리케이션으로 이용되는 클래스 파일(servlet), 설정 파일(xml), JSP나 HTML.. 2023. 5. 12.
자바 프로젝트에서 엑셀 데이터를 읽어들이는 방법(Apache POI Workbook , Sax Parsing) 💡 엑셀 데이터를 자바 프로젝트에 업로드하는 방법을 정리한다. 나는 2 가지 방법을 사용하였고 이를 간단하게 정리하겠다. Apache POI Apache POI는 아파치 소프트웨어 재단에서 만든 라이브러리로, 마이크로 소프트 오피스 파일 포맷을 순수 자바 언어로서 읽고 쓰는 기능을 제공한다. 현재 가장 간단하면서도 강력한 방법이다. FileInputStream file = new FileInputStream("/액셀/파일/경로/액셀파일명.xlsx"); // 파일 읽기 XSSFWorkbook workbook = new XSSFWorkbook(file); // 엑셀 파일 파싱 XSSFSheet sheet = workbook.getSheetAt(0); // 첫번째 시트 불러오기 위 코드에 대해 설명하면 Fil.. 2023. 5. 12.
DTO 클래스 ↔︎ Entity 클래스 Mapping에 대한 정리(ModelMapper, Mapstruct, 수동매핑) DTO(Data Transfer Object)란? 데이터를 전송하기 위한 객체이다. 클라이언트에서 서버 쪽으로 요청하는 요청 데이터와 서버에서 클라이언트 쪽으로 전송하는 응답 데이터 사이에서 사용된다. 어떠한 비즈니스 로직도 가져서는 안 되며 저장, 검색, 직렬화, 역직렬화 로직만 가져야 한다. DTO 클래스를 활용할 때의 장점 요청 및 응답 데이터를 하나의 객체로 전달하거나 받음으로써 코드를 간결하게 유지할 수 있다. HTTP 요청 및 응답을 받는 핸들러 메서드는 말 그대로 요청 및 응답을 받는 것이 주목적이기 때문에 최대한 간결하게 작성되어야 한다. 데이터의 유효성(Validation) 검증을 단순화할 수 있다. DTO 클래스를 사용하면 유효성 검증 로직을 DTO 클래스로 빼내어 핸들러 메서드의 간결.. 2023. 5. 8.
JVM과 자바 메모리 구조 간단 요약 정리 💡 회사에서 받은 맥북으로 실무 과제를 진행하다가 java.lang.OutOfMemoryError: Java heap space라는 에러를 만났다. 이 에러는 힙 영역의 메모리 공간 부족 때문에 발생하는 에러이다. 평소 스택 영역, 힙 영역 등 자바의 메모리 부분에 대해 자세히 모르는 것이 찜찜했었기 때문에 이번 기회에 공부해 보자는 생각이 들었다. JVM(Java Virtual Machine) 자바는 컴파일러를 통해 기계어로 변환되는 언어이다. 컴파일이란 특정 프로그래밍 언어를 기계가 이해할 수 있게 번역하는 과정이다. 자바소스를 자바 컴파일러가 바이트 코드로 변환시키고 JVM은 바이트 코드를 운영체제에 맞는 기계어로 변환해 준다. 자바의 장점이라고 불리는 플랫폼 독립성, Write Once Run A.. 2023. 5. 5.
JPQL - 경로 표현식 경로표현식 .(점)을 찍어 객체 그래프를 탐색하는 것을 말한다. SELECT m.username -- > 상태 필드 FROM Member m JOIN m.team t -- > 단일 값 연관 필드 JOIN m.orders o -- > 컬렉션 값 연관 필드 WHERE t.name = '팀A' 용어 정리 상태 필드(state field) 단순히 값을 저장하기 위한 필드 ex) m.username 연관필드(association field) 연관관계를 위한 필드 단일 값 연관 필드 @ManyToOne, @OneToOne 대상이 엔티티(ex: m.team) 컬렉션 값 연관 필드 @OneToMany, @ManyToMany 대상이 컬렉션(ex: m.orders) 명시적 조인 join 키워드를 직접 사용하는 것을 말한다.. 2023. 5. 4.
JPQL 함수 JPQL 기본 함수 JPQL에서 제공하는 표준 함수로 데이터베이스에 관계없이 쓸 수 있다. CONCAT SUBSTRING TRIM LOWER, UPPER LENGTH LOCATE ABS, SQRT, MOD SIZE, INDEX(JPA 용도) 사용자 정의 함수 호출 하이버네이트는 사용 전 방언에 추가해야한다. 사용하는 DB 방언을 상속받고, 사용자 정의 함수를 등록한다. 참고 김영한 - 자바 ORM 표준 JPA 프로그래밍 2023. 5. 3.
JPQL 조건식 - CASE 식 기본 CASE 식 -- 기본 CASE 식 SELECT CASE WHEN m.age = 60 THEN '경로요금' else '일반요금' END FROM Member m -- 단순 CASE 식 SELECT CASE t.name WHEN '팀A' THEN '인센티브110%' WHEN '팀B' THEN '인센티브120%' ELSE '인센티브105%' END FROM Team t -- COALESCE : 하나씩 조회해서 null이 아니면 반환 SELECT COALESCE(m.username, '이름 없는 회원') FROM Member m -- 사용자 이름이 없으면 이름 없는 회원을 반환 -- NULLIF : 두 값이 같으면 null 반환, 다르면 첫번째 값 반환 SELECT NULLIF(m.username, '관.. 2023. 5. 3.
728x90