H2 데이터베이스 설치, 실행
데이터베이스파일생성방법
jdbc:h2:~/test (최초한번) ~/test.mv.db 파일생성확인
이후부터는jdbc:h2:tcp://localhost/~/test 이렇게접속
테이블생성하기
테이블관리를위해프로젝트루트에sql/ddl.sql 파일을생성
drop table if exists member CASCADE;
create table member
(
id bigint generated by default as identity,
name varchar(255),
primary key (id)
);
순수 JDBC
build.gradle 파일에 jdbc, h2 데이터베이스관련라이브러리추가
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.h2database:h2'
자바는 db랑 붙으려면 JDBC 드라이버가 꼭 있어야한다. 이걸 가지고 서로 연동을 한다.
데이터 베이스가 제공하는 클라이언트 : h2database
db에 붙으려면 접속 정보도 넣어야겠지
application.properties 에서 정보를 넣으면 된다!
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
위와 같이 적어두면 스프링부트가 DataSource를 만들어둔다
MemberRepository구현을 메모리에 할거야 -> MemoryMemberRepository
DB랑 연결해서 JDBC로 구현할거야 -> JdbcMemberRepository
db에 붙으려면 datasource 라는게 필요하다
private final DataSource dataSource;
public JdbcMemberRepository(DataSource dataSource) {
this.dataSource = dataSource;
}
스프링으로부터 datasource를 주입받는다
db에 insert한 후 1번,2번 값 얻어오는것
Statement.RETURN_GENERATED_KEYS
private Connection getConnection() {
return DataSourceUtils.getConnection(dataSource); }
DataSourceUtils 통해서 커넥션을 얻어야. why?데이터베이스 커넥션을 똑같이 유지해준다
닫을 때도
private void close (Connection conn) throws SQLException {
DataSourceUtils.releaseConnection(conn, dataSource);
}
DataSourceUtils 통해서 release 해줘야한다.
@Configuration 해준것도 스프링 빈으로 관리해준다
스프링이 자체적으로 DataSource 를 만들어준다
인터페이스를 두고 구현체를 바꿔끼운다 - > 다형성 ->
다형성이 편리하게 되도록 스프링 컨테이너가 지원해주는것.
데이터베이스는 기본적으로 transaction이라는 개념이 있다.
insert call 을 하고 commit하기 전까지는 db에 반영이 안된다.
@SpringBootTest 실제로 스프링을 띄워서 실행함
@SpringBootTest: 스프링컨테이너와테스트를함께실행한다.
테스트 케이스의 경우에만!
테스트 케이스에 @Transactional을 달면 테스트를 실행할 때 transanction을 실행하고
DB에 데이터를 insert call 하고 다 넣은 다음에 테스트가 끝나면 roll back 을 해준다
->db에 넣었던 데이터가 지워진다 ->다음 테스트를 반복해서 실행할 수 있게 된다.
순수하게 자바 코드로 단위별로 테스트 하는것 -> 단위 테스트
db까지 연동하여 테스트 하는 것 -> 통합 테스트
스프링 JDBCTemplate
생성자가 딱 하나면 @Autowired 생략가능!
'스프링 > 스프링 입문' 카테고리의 다른 글
7/3 AOP (0) | 2022.07.03 |
---|---|
6/30 스프링 DB 접근 기술 (2) - JPA (0) | 2022.07.03 |
6/30 스프링 입문 - 웹 MVC 개발 (0) | 2022.06.30 |
6/30 스프링 입문 - 스프링 빈과 의존관계 (0) | 2022.06.30 |
6/29 스프링 입문 - 회원관리 예제 (0) | 2022.06.29 |