개발 공부/Spring

스프링 입문 - DB접근 기술

공부하는개발자_ 2023. 11. 29. 11:38

 

 

 

 

generated by default as identity : 값을 세팅하지 않고 insert하면 db가 자동으로 id값을 채워줌

 

 


 

순수 JDBC

자바는 DB로 연결하기 위해 JDBC드라이버가 필요하다

 

build.gradle에 라이브러리 추가

implementation 'org.springframework.boot:spring-boot-starter-jdbc'

runtimeOnly 'com.h2database:h2'

 

import 필요 -> build.gradle에서 아래의아이콘 누르면 import됨

db 접근 준비 완료

 

 

스프링을 통해 dataSource를 주입 받아야 함

 


통합 테스트

Spring Framework 에서 DB Connection을 사용할 때는 DataSourceUtils를 통해 connection을 획득해야 한다.

닫을때도 utils를 통해서 release를 해줘야 한다

 

 

개방-폐쇄 원칙(OCP, Open-Closed Principle) 확장에는 열려있고, 수정, 변경에는 닫혀있다.

스프링의 DI (Dependencies Injection)을 사용하면 기존 코드를 전혀 손대지 않고, 설정만으로 구현 클래스를 변경할 수 있다.

 


스프링 JDBC Template

Jdbc template은 인젝션 받을 수 없다. DataSource를 인젝션 받아야 한다

생성자가 하나만 있는경우, 스프링 빈으로 등록되어 Autowired 생략 가능

 

 

 

위의 코드를 아래와 같이 간략하게 사용 할 수 있음

 

 

 

 


JPA

 

build.gradle에 jpa 라이브러리 추가

 

 

application.properties에 jpa관련 설정 추가

jpa가 날리는 SQL을 볼수 있음

 

jpa.hibernate.ddl-auto : 객체를 보고 테이블 만들어 주는 기능

예제에서는 이미 만들어놨으므로 none으로 설정

 

jpa는 인터페이스만 제공 되고, 구현체로  Hibernate, Eclipse Link등 구현 기술들이 여러개의 벤더들이있다

객체와

ORM기술

Object:객체, Relational database talble M:mapping 한다는 뜻

Mapping을 어떻게 하는가? annotation을 함

 

 

jpa가 관리하는 entity가 됨

 

 

ID ( idendtity ) DB에 데이터를 넣었을때 자동으로 생성 해줌

 

 

EntityManager

build.gradle에서 jpa 라이브러리를 받으면 스프링 부트가 자동으로   EntityManager를 생성.

만들어진 것을 인젝션 받으면 됨

데이터 베이스 커넥션 정보, Property에 세팅해 놓은 정보, 데이터소스 포함 내부에서 처리 

 

반환을 optional로 하고 값이 없을 수도 있기 때문

 

jpql 쿼리 : 객체를 대상으로 쿼리를 날리면 테이블을 대상으로 한 sql로 번역됨

PK기반이 아닌 나머지는 jqpl 작성 필요

 

 

jpa를 사용할 때는 항상 transaction이 있어야 함.

Service계층에 달아주고 데이터를 저장하고 변경할때 항상 transaction필요

jpa는 join들어올 때 모든 데이터 변경이 트랜잭션 안에서 실행 된다

 

 


스프링 데이터 JPA

인터페이스가 인터페이스를 받을 때는 extends

Member : T

Long : id 타입

인터페이스는 다중 상속 가능

 

 

생성자가 하나인 경우 @Autowired생략 가능