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



JDBC Repository 정의
1. 쿼리 전달할때 Ingredient 객체(List)로 왔다갔다
2. id를 사용해 Ingredient 객체 사용
3. Ingredient 객체를 데이터베이스에 저장
JdbcTemplate이란 뭘까?


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에 주입한다.


ResultSet 을 왜 쓰지 ㅋㅋㅋ
this::mapRowToIngredient 이건 또 뭐고 ???
:: 쿼리로 생성된 결과를 row 개수만큼 호출되며, 결과세트의 모든행을 객체로 생성. List에 저장후 반환.
query 매서드는 매개변수2개 sql 명령어, mapRowToIngredient 메서드
queryForObject 매서드는 매개변수 3개 sql 명령어, mapRowToIngredient 메서드, 검색할 행의 id
id는 첫번째 인자(물음표)에 적용됨.
:: 객체의 List를 반환하는 대신, 하나의 객체만 반환.

mapRowToIngredient 대신 RowMapper를 쓰면 중간에 이렇게 길어진다.
메서드가 전달되서 편해졌다!!
자바 8에서 가능해짐:: 메서드 참조, 람다 추가되어서!
장점: 익명 클래스 인스턴스를 생성하지 않는다. 메서드를 참조 인자로 전달해서 여러번 안써도 된다.
데이터 추가:: jdbc.update --> 쿼리문, 업로드할 데이터 매개변수들~~

3. 스키마 정의, 데이터 추가
schema.sql 파일을 src/main/resources 폴더에 저장하면!
데이터 베이스에서 자동 실행한다.


4. 타코, 주문 데이터 추가
데이터를 저장하는 방법
1) update 메서드 사용
2) SimpleJdbcInsert 래퍼(wrapper) 클래스를 사용한다
JdbcTemplate 사용 -> 데이터 저장

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


3.2 JPA(스프링데이터) 사용 --> 데이터 저장, 사용
1. JPA 프로젝트 추가
2. 도메인 객체에 어노테이션 추가
3. JPA 리퍼지터리 선언
4. JPA 리퍼지터리 커스터마이징
'학습 기록 (Learning Logs) > 스프링인액션' 카테고리의 다른 글
[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 |