데이터베이스) JDBC 와 MyBatis(SQL Mapper)
·
데이터베이스 탐구
JDBC(Java Database Connectivity) JDBC(Java Database Connectivity)는 자바에서 가장 오래된 데이터베이스 연동 기술로서, 모든 관계형 데이터베이스에 대해서 동일한 자바 코드를 사용합니다. JDBC는 다형성(Poloymorphism)을 기반으로 동작하기 때문에 데이터베이스와 무관하게 동일한 자바 코드를 사용할 수 있습니다.    DAO(Data Access Object) DAO(Data Access Object) 클래스를 구현할 때는 JDBC(java.sql 패키지)가 제공하는 인터페이스를 이용합니다.그러면 인터페이스를 구현한 드라이버가 실질적인 데이터베이스 연동을 처리합니다.따라서 데이터베이스가 변경되는 경우에 각 벤더에서 제공하는 드라이버만 교체해 주면 ..
JPA) N + 1 문제
·
자바 탐구
N + 1 문제 데이터베이스의 관계형 모델과 테이블 간의 관계를 다룰 때 주로 발생한다. 한 개의 쿼리로 데이터를 조회할 때, 해당 데이터에 연관된 다른 데이터들을 조회할 때 추가적인 쿼리가 n개 발생하는 현상이다. 주로 ORM(Object-Relational Mapping) 라이브러리를 사용하는 애플리케이션에서 발생하며, 지연 로딩(Lazy Loading)을 사용할 때 주로 발생한다. 해결 방법 해결방법으로는 Eager Loading(즉시 로딩)과 Fetch Joing이 있다. 1. Eager Loading(즉시 로딩) JPA에서 연관된 엔티티를 LAZY로딩으로 설정하여 쿼리가 실행될 때 실제로 연관된 엔티티를 가져오지 않고, 필요할 때 가져오도록 설정이 되어있다. Earger Loading을 사용하면..
JPA) 영속성 컨텍스트
·
자바 탐구
영속성 콘텍스트 엔티티를 영구 저장하는 환경이라는 의미 애플리케이션과 데이터베이스사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 한다. 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 매니저는 영속성 콘텍스트에 엔티티를 보관하고 관리한다. 엔티티의 생명주기 비영속(new/transit) : 영속성 콘텍스트와 전혀 관계가 없는 상태 Product product = new Product(); product.setId("product1"); product.setName("책"); 객체를 생성하였지만 저장은 되지 않음 영속(managed) : 영속성 콘텍스트에 저장된 상태 Product product = new Product(); product.setId("product1"); product.setN..
JPA) Entity의 연관 관계 - @ManyToMany -
·
자바 탐구
Entity의 연관 관계 - @ManyToMany - N 대 M 관계 N : M 관계를 맺어주는 역할을 한다. 상품 Entity와 고객 Entity가 N : M 관계라고 가정 단방향 관계 N : M 관계를 풀어내기 위해 중간 테이블(orders)을 생성하여 사용한다. Product Entity import jakarta.persistence.*; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import java.util.ArrayList; import java.util.List; @Entity @Getter @NoArgsConstructor public class Product { @Id @GeneratedVal..
JPA) Entity의 연관 관계 - @OneToMany -
·
자바 탐구
Entity의 연관 관계 - @OneToMany - 1 대 N 관계 1 : N 관계를 맺어주는 역할을 한다. 상품 Entity와 고객 Entity가 1 : N 관계라고 가정 단방향 관계 고객 Entity가 N의 관계로 외래 키를 가지고 있지만 외래 키를 관리하는 주인은 product entity 관계가 N인 users 테이블에 추가한 후 상품 Entity를 통해 관리한다. Product Entity import jakarta.persistence.*; import lombok.Getter; import lombok.NoArgsConstructor; import java.util.ArrayList; import java.util.List; @Entity @Getter @NoArgsConstructor pu..
JPA) Entity의 연관 관계 - @ManyToOne -
·
자바 탐구
Entity의 연관 관계 - @ManyToOne - N 대 1 관계 @ManyToOne N 대 1 관계를 맺어주는 역할을 한다. 고객 Entitiy와 상품 Entity가 N : 1 관계라고 가정 단방향 관계 Product Entity가 N의 관계로 외래 키의 주인 Product Entity import jakarta.persistence.*; import lombok.Getter; import lombok.NoArgsConstructor; @Entity @Getter @NoArgsConstructor public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name..
JPA) Entity의 연관 관계 - @OneToOne -
·
자바 탐구
Entity의 연관 관계 - @OneToOne - 1 대 1 관계 Entity로 데이터베이스를 생성하고자 할 때 Entitiy 클래스를 JPA가 데이터베이스의 테이블에 매핑을 해주는 개념이다. 따라서 인터페이스인 JpaRepository를 상속한 인터페이스를 만들어 주어야 한다. interface 간의 상속은 extends로 이루어진다. Repository public interface extends JpaRepository { } application.properties spring.datasource.url = spring.datasource.username = root spring.datasource.password = spring.datasource.driver-class-name=com.mysq..
JPA) 데이터베이스 테이블과 Entity의 연관 관계 표현 차이
·
자바 탐구
데이터베이스 테이블과 Entity의 연관 관계 표현 차이 users 테이블 생성 users 테이블 : 물품 구매를 할 이용자 목록 CREATE TABLE users ( id bigint not null auto_increment, name varchar(255), primary key(id) ); id를 primary key로 하여 users 테이블이 생성되었다. product 테이블 생성 product 테이블 : 물품 목록 CREATE TABLE product ( id bigint not null auto_increment, name varchar(255), price float(53) not null, primary key (id) ); id를 primary key로 하여 porduct 테이블이 생성..
오지랖 토끼
'jpa' 태그의 글 목록