* 인프런 김영한님의 '스프링 입문' 강의를 듣고 작성한 내용입니다! (https://inf.run/txXC)
H2 DB 설치
- 개발이나 테스트 용도로 가볍고 편리한 DB, 웹화면 제공
- https://h2database.com/html/main.html
H2 Database Engine
H2 Database Engine Welcome to H2, the Java SQL database. The main features of H2 are: Very fast, open source, JDBC API Embedded and server modes; in-memory databases Browser based Console application Small footprint: around 2 MB jar file size Suppor
h2database.com
- (Windows 기준) Download -> Windows Installer 클릭해서 설치
- 설치 후 H2 console 실행
- jdbc:h2:~/test 생성
- 이후 ~/ 경로 에서 test.mv.db 파일 생성 확인
- 이후부터는 jdbc:h2:tcp://localhost/~/test 로 접속
- 접속 후 member table생성 (테이블 관리 위해 프로젝트 루트에 sql/ddl.sql 파일 생성)
- id 설정시 generated by default as identity 라고 해주면 id값을 setting안하고 insert해도 자동으로 db가 채워준다
순수 Jdbc
- 옛날에는 이렇게 코드를 길게 짰었다...(코드는 강의 자료 참고)
- SpringConfig.java에 MemberRepository에서 return new JdbcMemberRepository(dataSource); 로 변경해준다 (repository 구현체를 memory에서 순수 jdbc로 바꾸기)
- => 이렇게 해주는 것을 OCP(개방 폐쇄 원칙) 이라 한다. 확장에는 열려있고, 수정에는 닫혀있다. 객체지향의 다형성 이용
스프링 통합 테스트
- 테스트 시에 db에 데이터를 넣어 주는 것을 여러번 해야하는데, 테스트를 여러번 하니까 test class위에 @Transactional annotation을 달아줘서 테스트 하나가 끝나면 rollback 하도록 (만약 commit 해야하면 해당 테스트 위에 @Commit 달아주면 된다)
- 스프링 위에 올려서 하는 테스트를 통합테스트라고 한다 (이전에 java 코드로 짠것은 단위테스트라 한다)
- 단위테스트가 실행이 더 빠르다(스프링 컨테이너 없이 하니까)
스프링 JdbcTemplate
- 순수 jdbc와 동일
- sql은 직접 작성
JPA
- 기존의 반복되는 코드를 줄여준다
- sql과 데이터 중심 설계에서 객체 중심 설계로 전환 가능
- 생산성을 높일 수 있다
- build.gradle에 jpa, h2 데이터베이스 관련 라이브러리를 추가한 후 refresh(코끼리 모양 누르기)
- EntityManager을 사용한다(em, 이전엔 datasource사용)
- jpa 사용시에는 꼭 transaction이 필요하다. 따라서 MemberService에 @Transactional을 추가한다
스프링 데이터 JPA
- jpa기술을 spring이 한번 감싸서 제공하는 기술이다
- 인터페이스를 통해 CRUD 구현한다
- 인터페이스를 만들어 놓으면 스프링이 인터페이스 구현체를 만들어 spring bean에 등록하기 때문에 우리는 injection만 해주면 된다
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
package hello.hellospring.repository; import hello.hellospring.domain.Member; import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; public interface SpringDataJpaMemberRepository extends JpaRepository<Member, Long>, MemberRepository{ // JPOL select m from Member m where m.name = ? @Override Optional<Member> findByName(String name); } - JpaRepository<Member, Long> Long은 pk의 data type
- JpaRepository에 들어가보면 이미 findById, findAll 이(공통 인터페이스) 구현되어 있으므로 우리가 필요한 findByName만 만들어 주면된다
- 이때 findBy + ? 로 해주고 안에 조건들을 넣어주면 자동으로 select m from Member m where m.name = ? 이렇게 만들어준다
'개발 > Spring' 카테고리의 다른 글
스프링부트 console에 color 적용하기, 로그 찍기 (0) | 2021.07.14 |
---|---|
[스프링 입문] AOP (0) | 2021.06.30 |
[스프링 입문] 스프링 회원관리 예제 - 6. 웹 MVC 개발 (0) | 2021.06.30 |
[스프링 입문] 스프링 회원관리 예제 - 5. 스프링 빈과 의존관계 (0) | 2021.06.30 |
[스프링 입문] 스프링 회원관리 예제 - 4. 회원 서비스 개발 및 테스트 (0) | 2021.06.29 |