반응형

spring 21

객체지향 쿼리 언어1 - 기본 문법

JPA는 다양한 쿼리 방법을 지원한다.- JPQL- JPA Criteria- QueryDSL- 네이티브 SQL- JDBC API 직접 사용, MyBatis, SpringJdbcTemplate JPQL- 가장 단순한 조회 방법이다.  - EntityManager.find()  - 객체 그래프 탐색(a.getB().getC()) 만약 나이가 18살 이상인 회원을 모두 검색하고 싶다면 어떻게 해야 할까?JPA를 사용하면 엔티티 객체를 중심으로 개발하게 되는데 문제는 검색 쿼리이다.검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색해야 한다.모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능 하다.애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요하다. JPQL..

공부/JPA 2024.12.30

값 타입

JPA는 데이터 타입을 최상위 레벨로 분류하면 2가지로 분류한다. 1. 엔티티 타입  - @Entity로 정의하는 객체  - 데이터가 변해도 식별자로 지속해서 추적 가능 ex) 회원의 키나 값을 변경해도 식별자로 인식 가능2. 값 타입  - int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체  - 식별자가 없고, 값만 있으므로 변경시 추적 불가  - 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체  값 타입은 또 세가지로 분류될 수 있다.1. 기본값 타입2. 임베디드 타입3. 컬렉션 값 타입 값 타입1. 기본값 타입  - 자바 기본 타입(int, double)  - 래퍼 클래스(Integer, Long)  - String 기본 값 타입은 String ..

공부/JPA 2024.12.23

프록시와 연관관계 정리

프록시프록시는 왜 사용할까? 아래의 그림을 보자.Member를 조회할때 Team도 함께 조회가 필수인가?아래의 코드를 보자.Member member = em.find(Member.class, 1L);printMemberAndTeam(member);private static void printMemberAndTeam(Member member) { String name = member.getName(); System.out.println("name = " + name); Team team = member.getTeam(); System.out.println("team = " + team);} em.find하여 쿼리가 나갈때 team과 member 쿼리가 두 방이 나가서 한번에 찾을 수 ..

공부/JPA 2024.12.21

다양한 연관관계 매핑

연관관계 매핑시 고려사항 3가지- 다중성    - 다대일 : @ManyToOne    - 일대다 : @OneToMany    - 일대일 : @OneToOne    - 다대다 : @ManyToMany- 단방향, 양방향    - 테이블(단방향) : 외래 키 하나로 양쪽 조인이 가능하다 즉 방향이라는 개념 자체가 없다.    - 객체(양방향) : 객체는 참조용 필드가 있는 쪽으로만 참조가 가능하다. 한쪽만 참조하면 단방향이고, 양쪽이 참조하면                                 양방향이다.- 연관관계의 주인    - 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는다.    - 객체 양방향 관계는 A->B, B->A처럼 참조가 2군데이다.    - 객체 양방향 관계는 참조가 2군데 있..

공부/JPA 2024.12.03

연관관계 매핑 기초

https://surrealcode.tistory.com/103 엔티티 매핑엔티티 매핑엔 다음과 같은 어노테이션이 사용된다.객체와 테이블 매핑 : @Entity, @Table필드와 컬럼 매핑 : @Column기본 키 매핑 : @Id연관관계 매핑 : @ManyToOne, @JoinColumn  객체와 테이블 매핑@Entity- @Ensurrealcode.tistory.com앞서서 왜 테이블 설계와 개발 후 왜 연관관계가 필요한지에 알아봤다.참고하도록 하자. 목표- 객체와 테이블 연관관계의 차이를 이해- 객체의 참조와 테이블의 외래 키를 매핑- 용어 이해  - 방향(Direction) : 단방향, 양방향  - 다중성(Multiplicity) : 다대일, 일대다, 일대일, 다대다 이해  - 연관관계 주인(Ow..

공부/JPA 2024.12.02

엔티티 매핑

엔티티 매핑엔 다음과 같은 어노테이션이 사용된다.객체와 테이블 매핑 : @Entity, @Table필드와 컬럼 매핑 : @Column기본 키 매핑 : @Id연관관계 매핑 : @ManyToOne, @JoinColumn  객체와 테이블 매핑@Entity- @Entity가 붙은 클래스는 JPA가 관리하고, 엔티티라 한다.- JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수이다.- 주의  - 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자)  - final 클래스, enum, interface, inner 클래스는 사용할 수 없다.  - 저장할 필드에 final은 사용할 수 없다.속성 : name  - JPA에서 사용할 엔티티 이름을 지정한다.  - 기본값 : 클래스 ..

공부/JPA 2024.11.30

웹 계층 개발

https://surrealcode.tistory.com/98 애플리케이션 구현(도메인 개발)구현 전 앞서 만든 예제를 통해 도메인 분석과 설계를 하여 구현 준비를 한다https://surrealcode.tistory.com/97 도메인 분석 설계JPA 프로그래밍의 이론을 알기 전 실전 코딩을 통해 직접 코드를 만들어surrealcode.tistory.com애플리케이션까지 구현이 마무리 되었다면, 웹 계층을 개발하도록 한다.Controller 관련과 front 관련 개발이다.thymeleaf를 사용할 예정이다. 개발 순서는 다음과 같이 진행한다.홈 화면과 레이아웃 -> 회원 등록 -> 회원 목록 조회 -> 상품 등록 -> 상품 목록 -> 상품 수정 -> 변경 감지와 병합(merge) -> 상품 주문 ->..

카테고리 없음 2024.11.25

애플리케이션 구현(도메인 개발)

구현 전 앞서 만든 예제를 통해 도메인 분석과 설계를 하여 구현 준비를 한다https://surrealcode.tistory.com/97 도메인 분석 설계JPA 프로그래밍의 이론을 알기 전 실전 코딩을 통해 직접 코드를 만들어보고, 기본 학습을 다시 다루어 볼 예정이다. 목차는 다음과 같다. 목차1. 요구사항 분석2. 도메인 모델과 테이블 설계3. 엔surrealcode.tistory.com 만들어볼 UI는 다음과 같다.º 회원 기능  - 회원 등록  - 회원 조회º 상품 기능  - 상품 등록  - 상품 수정  - 상품 조회º 주문 기능  - 상품 주문  - 주문 내역 조회  - 주문 취소 ---예제를 단순화 하기 위해 다음 기능은 구현하지 않았다.---1. 로그인과 권한 관리2. 파라미터 검증과 예외 ..

공부/JPA 2024.11.21

빈 스코프

빈 스코프란?지금까지 우리는 스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어서 스프링 컨테이너가 종료될 때 까지 유지된다고 학습했다. 이것은 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. 스코프는 번역 그대로 빈이 존재할 수 있는 범위를 뜻한다. 스프링은 다음과 같은 다양한 스코프를 지원한다.싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고, 더는 관리하지 않는 매우 짧은                         범위의 스코프이다웹 관련 스코프 -request : 웹 요청이 들어오고 나갈때까지 유지되는 스코프                          sessi..

공부/Spring 2024.11.08

bean 생명주기 콜백

빈 생명주기 콜백데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다.스프링을 통해 이러한 초기화 작업과 종료 작업을 어떻게 진행하는지 알아보자. 간단하게 외부 네트워크에 미리 연결하는 객체를 하나 생성한다고 가정해보자. 실제로 네트워크에 연결하는 것은 아니고, 단순히 문자만 출력하도록 했다. 이 'NetworkClient'는 애플리케이션 시작 지점에 'connect()'를 호출하여 연결을 맺어주고, 애플리케이션이 종료되면 'disconnect()'를 호출해서 연결을 끊어야 한다.public class NetworkClient { private Str..

공부/Spring 2024.11.06
반응형