분류 전체보기
-
JPA (3) - 엔티티 매핑카테고리 없음 2024. 1. 11. 12:10
1. 객체와 테이블 매핑 1.1 Entity @Entity : JPA가 관리, 테이블과 매핑할 클래스는 Entity 필수 - 기본 생성자 필수, final클래스, enum, interface, inner클래스에는 사용불가 - 저장할 필드에 final 금지 Entity 속성 : name : JPA에서 사용할 엔티티 이름 지정 (기본값은 클래스 이름 그대로 -> 가급적 기본값 사용하자) 1.2 @Table 엔티티와 매핑할 테이블 지정 속성 : name : 매핑할 테이블 명 (기본값 엔티티 이름을 사용) catalog : DB catalog 매핑 schema : DB scchema매핑 uniqueConstraints: DDL 생성 시 유니크 제약 조건 생성 * 앞으로 나올 DDL 속성은 테이블 생성시 한번만 ..
-
JPA (2) - 영속성 관리카테고리 없음 2024. 1. 11. 11:15
> JPA에서 가장 중요한 것은 1. 객체와 관계형 데이터 베이스 매핑하기 2. 영속성 컨텍스트이다. - 엔티티 매니저는 요청에 따라 엔티티 매니저를 생성해서 주고, 사용자는 엔티티 매니저를 통해 커넥션풀에서 커넥션을 얻어서 DB에 접근한다. 1. 영속성 컨텍스트란? > 엔티티를 영구 저장하는 환경을 뜻한다. (em.persist()) > 영속성 컨텍스트는 논리적은 개념이다. (엔티티 매니저를 통해 영속성 컨텍스트에 접근한다.) 1.1 엔티티의 생명주기 > 비영속 : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 > 영속 : 영속성 컨텍스트에 관리되는 사애 > 준영속 : 영속성 컨텍스트에 저장되었다가 분리된 상태 > 삭제 : 삭제된 상태 Member member = new Member(); // 비영속..
-
JPA - 프로젝트 생성Web/JPA 2024. 1. 11. 10:47
> JPA를 사용하기 위해서는 hibernate-entitymanager 필요함 > persistence.xml파일이 필요 (Spring 없이 순수 자바에서 jpa 활용) > DB연동, 엔티티 매니저 팩토리 생성시 필요 > persistence-unit name에 매니저 팩토리 생성시 불러올 이름 지정 > javax.persistence로 시작하는 속성은 JPA표준 속성이고, hibernate로 시작하는 속성은 하이버네이트 전용 속성이다. * 어떤 DB접근 기술을 사용하던 커넥션풀과 데이터 소스 등록필수! -> dialetc는 DB 방언 부분임 -> JPA는 특정 데이터 베이스에 종속적이지 않고, 어떤 DB를 사용하던 똑같이 서비스하도록 설계됨 -> 따라서 각 DB마다 문법과 함수가 다른것은 어떤 DB를..
-
문자열자료구조와 알고리즘/문제풀기 2024. 1. 10. 18:41
- 팰린드롬을 검사하는 간단한 문제이다. - 단 문자열과 숫자만 비교해야한다. > Leetcode (125) - 유효한 팰린드롬 나의 풀이 (13ms) public boolean isPalindrome(String s) { s = s.toLowerCase(); s = s.replaceAll("[^a-z0-9]",""); int left = 0; int right = s.length()-1; for(int i=0; i right){ return true; } if(s.charAt(left) == s.charAt(right)){ left++; right--; }else{ return false; } } return true; } 1. 문자 단위로 추출해서 처리 (2ms) public boolean isPal..
-
JAP 활용 (1-4) : 변경 감지와 병합카테고리 없음 2024. 1. 4. 16:12
1. 준영속 엔티티 영속성 컨텍스트가 더는 관리하지 않는 엔티티를 의미 (DB에서 em.find등으로 꺼낸게 아니라, 엔티티를 new해서 만든것 -> DB에 이미 저장되어서 식별자가 존재하지만, 영속성 관리 안해주는 것) 2 준영속 엔티티를 수정하는 2가지 방법 > 변경 감지 기능 사용 > 병합 사용 2.1 변경 감지 기능 사용 @Transcational void update(Item itemParam) { //준영속 엔티티가 넘어옴 Item findItem = em.find(Item.class,itemPAram.getId()) //영속으로 관리되는 엔티티 조회 findItem.setPrice(itemParam.getPrice()) // 이를 통해 데이터 수정 } - 영속성 컨텍스트에서 엔티티를 조회한 ..
-
JPA 활용 (1-3) - 엔티티 설계시 주의점Web/JPA 2024. 1. 4. 15:36
1. 엔티티는 가급적 Setter를 사용하지말자 -> Setter가 모두 열려있으면, 변경 포인트가 너무 많아서 유지보수가 어렵다. 1.2 모든 연관관계는 지연로딩으로 설정 > 즉시로딩은 예측이 어렵고, 어떤 SQL이 실행될지 추적하기 어렵다. 특히 JPQL을 실행할 때 N+1의 문제가 자주 발생함 > 실무에서 모든 연관관계는 지연로등으로 설정해야한다. > 연관된 엔티티를 DB에서 조회하면 fetch join, 엔티티 그래프들을 사용하자 > @XToOne(OneToOne,ManyToOne)관계는 기본이 즉시 로딩이므로 직접 지연로딩으로 설정해야한다. 1.3 컬렉션은 필드에서 초기화하자 컬렉션은 필드에서 바로 초기화하는 것이 안전하다. >null문제에서 안전함 > 하이버네이트는 엔티티를 영속화 할 때, 컬..
-
JPA 활용 (1-2) - 도메인 분석 설계Web/JPA 2024. 1. 4. 15:25
1. 도메인 모델과 테이블 설계 - 회원,주문,상품 관계 : 회원은 여러 상품을 주문할 수 있음 주문할 때 여러 상품을 선택할 수 있다 (주문과 상품은 다대다관계) (1 주문에 다 상품 1상품에 다 주문) 다대다 관계는 관계형 데이터베이스는 물론이고, 엔티티에서 거의 사용하지않음 따라서, 중간에 주문상품 테이블을 추가해서 다대일관계로 풀어냄 (1주문 다주문상품 다주문상품은 1주문) - 상품 분류 : 상품은 도서,음반,영화로 구분 상품이라는 공통 속성을 사용하므로, 상속구조 표현 - 회원 : 이름,임베디드 타입 주소, 주문을 리스트로 가짐 - 주문: 한 번 주문시 여러 상품을 주문할 수 있으므로 주문과 주문상품은 일대다 관계 주문은 상품을 주문한 회원과 배송정보,주문날짜,주문상태 가지고 있음 -> 주문 상..
-
JPA 활용 (1) - 프로젝트 환경설정Web/JPA 2024. 1. 4. 14:24
1. spring boot (build.gradle) > java 17버전 > dependencies: spring-data-jpa, thymeleaf, validation,spring-web, h2 > gradle은 의존관계 추가하면, 그 의존관계에 필요한 모든 의존관계 자동으로 끌어온다. > ./gradlew dependencies -configuration complieClasspath를 보면 의존관계 라이브러리 살펴볼 수 있음 * dependencies 추가하면서, version이 없는 것은 , plugins에 작성된 것은 2. H2 데이터 베이스 설치 > jdbc:h2:~/jspshop (최소한번) -> 한번 들어가줘야함 파일 모드로 들어가기 > ~/jpashop.mv.db -> 파일 생성 한번..