본문 바로가기

java/스프링인액션

[챕터 3] 데이터로 작업하기 72~112p

3.1 JDBC 사용 --> 데이터 읽고, 쓰기

데이터 persistence 저장, 지속성

상용구 코드 (boilerplate code) 없애려고 --> JDBC 기능 사용

코드를 줄이기 위해 --> JPA (jave persistnece Api) 데이터 저장을 사용.

 

 

1. 퍼시스턴스, 도메인 객체 수정

 

<데이터 persistnece의 최우선 자리>

관계형 데이터 베이스

SQL

 

JDBC JPA
JdbcTemplate  
관계형 데이터베이스에 대한 SQL 연산을 수행함  
이전 꺼  JDBC
  데이터 베이스 연결 객체 생성 코드 없다.

메서드 실행 끝난 후 그런 객체들을 클린 코드 없다.

catch 블록처럼 예외를 처리하는 코드 없다.


  쿼리를 수행 : queryForObject()

결과를 Ingredient 객체로 생성 : mapRowToIngredient()

함수에 초점을 가진다.

 

여기서 도메인은 == VO

 

 

id 필드 추가 ->  Ingredient 클래스, TacoOrder 클래스

 

id, createdAt 필드 추가 --> Taco 클래스, Order 클래스

 

2. jdbcTemplate 사용

JdbcTemplate 사용하려면 프로젝트의 classpath에 추가해야한다.

JDBC Starter 의존성을 비들 명세여 추가하면 됨. ---> pom.xml --> org.springframework.boot(spring-boot-starter-jdbc)

 

 

데이터 저장: 데이터베이스 필요함 -->  pom.xml --> com..h2database (h2)

내장된 데이터베이스. : H2

 

pom.xml 에 직접치면

 

pom.xml에 직접 글씨 안쓰고 이렇게 버튼 눌러도 됨
이렇게 쉽게 버튼으로 추가하면 됨

 

 

JDBC Repository 정의

1. 쿼리 전달할때 Ingredient 객체(List)로 왔다갔다 

2. id를 사용해  Ingredient 객체 사용

3.  Ingredient 객체를 데이터베이스에 저장

 

JdbcTemplate이란 뭘까?

 

데이터 연결하는걸 받아와서 query를 실행하는 그런 장소!!

 

https://gmlwjd9405.github.io/2018/12/19/jdbctemplate-usage.html 이미지출처

 

 

 

1) 인터페이스 만들기 : public interface IngredientRepository 

2) 구체화된 class 만들기 : @Repository     public class JdbcIngredientRepository 

 

@Repository

JdbcIngredientRepository를 자동으로 스프링 애플리키이션 컨텍스트 빈으로 생성해준다.

JdbcIngredientRepository 빈 생성 --> @Autowired 가 JdbcIngredientRepository 빈을 JdbcTemplate에 주입한다.

 

implement 사용

ResultSet 을 왜 쓰지 ㅋㅋㅋ

this::mapRowToIngredient  이건 또 뭐고 ???

:: 쿼리로 생성된 결과를 row 개수만큼 호출되며, 결과세트의 모든행을 객체로 생성. List에 저장후 반환.

 

 

query 매서드는                    매개변수2개    sql 명령어, mapRowToIngredient  메서드

queryForObject 매서드는       매개변수 3개     sql 명령어, mapRowToIngredient  메서드, 검색할 행의 id

id는 첫번째 인자(물음표)에 적용됨.

:: 객체의  List를 반환하는 대신, 하나의 객체만 반환.

 

mapRowToIngredient&nbsp; 대신&nbsp; RowMapper 익명클래스 인스턴스 사용

mapRowToIngredient 대신 RowMapper를 쓰면 중간에 이렇게 길어진다.

메서드가 전달되서 편해졌다!!

자바 8에서 가능해짐:: 메서드 참조, 람다 추가되어서!

 

장점: 익명 클래스 인스턴스를 생성하지 않는다. 메서드를 참조 인자로 전달해서 여러번 안써도 된다.

 

데이터 추가:: jdbc.update --> 쿼리문, 업로드할 데이터 매개변수들~~

 

 

 

 

3. 스키마 정의, 데이터 추가

schema.sql 파일을 src/main/resources 폴더에 저장하면!

데이터 베이스에서 자동 실행한다. 

테이블 만들기 == DB에서 해도 되겠네;;;

 

데이터 추가하기 == DB에서 해도 되겠네;;;

 

 

4. 타코, 주문 데이터 추가

데이터를 저장하는 방법

1) update 메서드 사용

2) SimpleJdbcInsert 래퍼(wrapper) 클래스를 사용한다

 

JdbcTemplate 사용 -> 데이터 저장

JdbcTemplate 사용 -> taco 데이터 저장하기

타코 디자인 정보, 

타코 객체 id, List에 저장된 Ingredient 객체의 id를 --------> Taco_Ingredients 테이블 행에 추가!

 

 

JdbcTemplate 사용 -> order 데이터 저장하기
JdbcTacoRepository 를 구현하기 : 쿼리문 있음. JdbcTemplate 사용 -> 진짜로 쿼리문 실행함

3.2 JPA(스프링데이터) 사용 --> 데이터 저장, 사용 

1. JPA  프로젝트 추가

 

2. 도메인 객체에 어노테이션 추가

 

3. JPA 리퍼지터리 선언

 

4. JPA 리퍼지터리 커스터마이징

 

 

'java > 스프링인액션' 카테고리의 다른 글

[8.3] 카프카 사용하기  (0) 2021.12.04
[6.3] 스프링 데이터 REST  (0) 2021.11.27
[6.3]  (0) 2021.11.27
챕터4 스프링 시큐리티  (0) 2021.11.20
1주차  (0) 2021.11.07