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생략 가능
'개발 공부 > Spring' 카테고리의 다른 글
사이드 프로젝트 - JPA Repository / Service (1) | 2023.12.08 |
---|---|
사이드 프로젝트 - Domain (Jpa) (1) | 2023.12.08 |
스프링 입문 - 회원관리 예제로 웹MVC개발 (조회) (0) | 2023.11.27 |
스프링 입문 - 회원관리 예제로 웹MVC개발 (등록) (0) | 2023.11.27 |
스프링 입문 - 빈과 의존관계 (1) | 2023.11.24 |