728x90
반응형
본 포스팅은 김영한 강사님의 인프런 강의 "스프링 입문"을 정리한 포스팅으로 강의 자료에서 사용한 자료를 사용했음을 밝힙니다.
자바와 데이터베이스를 연결할 때 순수 Jdbc를 사용하게 되면 반복적인 코드도 존재하고 길어지게 된다.
JdbcTemplate을 사용하면 이러한 반복 코드를 줄일 수 있다.
build.gradle에 다음과 같은 설정을 해준다.
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.h2database:h2'
resources/application.properties에 다음과 같은 설정을 해준다.
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
https://growth-coder.tistory.com/51
위 포스팅에서 MemberRepository라는 interface를 만들었고 임시로 MemoryMemberRepository를 만들어 구현을 했었다.
이제는 직접 h2 데이터베이스에 연결하여 사용할 Repository를 만들 것이다.
이름은 JdbcTemplateMemberRepository로 한다.
public class JdbcTemplateMemberRepository implements MemberRepository{
@Override
public Member save(Member member) {
return null;
}
@Override
public Optional<Member> findById(long id) {
return Optional.empty();
}
@Override
public Optional<Member> findByName(String name) {
return Optional.empty();
}
@Override
public List<Member> findAll() {
return null;
}
}
레포지토리 내부에 다음과 같은 코드를 추가해서 datasource를 injection 받아야한다.
private final JdbcTemplate jdbcTemplate;
@Autowired
public JdbcTemplateMemberRepository(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
rowMapper
결과를 받을 rowMapper를 만들어야한다.
private RowMapper<Member> rowMapper(){
return (rs, rowNum)->{
Member member = new Member();
member.setId(rs.getLong("id"));
member.setName(rs.getString("name"));
return member;
};
}
이제 이 rowMapper를 이용하면 된다.
<id 조회>
@Override
public Optional<Member> findById(long id) {
List<Member> result = jdbcTemplate.query("select * from member where id = ?", rowMapper());
return result.stream().findAny();
}
<name 조회>
@Override
public Optional<Member> findByName(String name) {
List<Member> result = jdbcTemplate.query("select * from member where name = ?", rowMapper(), id);
return result.stream().findAny();
}
<전체 조회>
@Override
public List<Member> findAll() {
return jdbcTemplate.query("select * from member",rowMapper(), name);
}
<저장>
멤버 저장의 경우 SimpleJdbcInsert를 사용하면 쿼리를 짜지 않고 쉽게 작성할 수 있다.
@Override
public Member save(Member member) {
SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
jdbcInsert.withTableName("member").usingGeneratedKeyColumns("id");
Map<String, Object> parameters = new HashMap<>();
parameters.put("name", member.getName());
Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(parameters));
member.setId(key.longValue());
return member;
}
이제 configuration에서 이 레포지토리를 사용하겠다고 알려주면 된다.
@Configuration
public class SpringConfig {
private final DataSource datasource;
public SpringConfig(DataSource datasource) {
this.datasource = datasource;
}
@Bean
public MemberService memberService(){
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository(){
return new JdbcTemplateMemberRepository(datasource);
}
}
참고로 실행시킬 때 h2 데이터베이스와 연결을 해야한다.
728x90
반응형
'공부 > Spring' 카테고리의 다른 글
[Spring][인프런 스프링 입문] Test 코드 작성 (0) | 2023.01.02 |
---|---|
[Spring][인프런 스프링 입문] JPA 기본 사용법 (2) | 2023.01.01 |
[Spring][Error] Consider renaming one of the beans or enabling overriding 오류 (0) | 2022.12.30 |
[Spring][인프런 스프링 입문] 스프링 빈과 의존 관계 (0) | 2022.12.29 |
[Spring][인프런 스프링 입문] 웹 개발 기초 (0) | 2022.12.28 |
댓글