일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- SWEA
- php 프로그래밍 입문 문제풀이
- 백준
- 페이코 추천인
- programmers
- php 프로그래밍 입문 3판
- spring
- 자바
- 최단 경로
- 배열
- 자바 스프링
- php 프로그래밍 입문
- php 프로그래밍 입문 솔루션
- Java
- php 프로그래밍 입문 연습문제
- 플러터 개발환경 설정
- php 프로그래밍
- 파이썬
- C언어
- 한정 분기
- Flutter
- 스프링
- php 프로그래밍 입문 예제
- php
- 페이코 추천인코드
- C
- 페이코 초대코드
- JAVA SPRING
- 플러터
- 페이코 친구코드
Archives
- Today
- Total
02-02 06:48
ImJay
[Java Spring] 1-21. JDBC Template 본문
반응형
[Java Spring] 1-21. JDBC Template
1. 스프링 JdbcTemplate과 MyBatis 같은 라이브러리는 JDBC API에서 본 반복 코드를 대부분 제거해준다. 하지만 SQL은 직접 작성해야 한다.
2. src > main > java > hello.hellospring > repository > 새로 만들기 > 클래스 > JdbcTemplateMemberRepository 생성
3. 코드 작성
package hello.hellospring.repository;
import hello.hellospring.domain.Member;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcInsert;
import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
public class JdbcTemplateMemberRepository implements MemberRepository{
private final JdbcTemplate jdbcTemplate;
public JdbcTemplateMemberRepository(DataSource dataSource) {
jdbcTemplate = new JdbcTemplate(dataSource);
}
@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;
}
@Override
public Optional<Member> findById(Long id) {
List<Member> result = jdbcTemplate.query("select * from member where id = ?", memberRowMapper());
return result.stream().findAny();
}
@Override
public Optional<Member> findByName(String name) {
List<Member> result = jdbcTemplate.query("select * from member where name = ?", memberRowMapper());
return result.stream().findAny();
}
@Override
public List<Member> findAll() {
return jdbcTemplate.query("select * from member", memberRowMapper());
}
private RowMapper<Member> memberRowMapper() {
return (rs, rowNum) -> {
Member member = new Member();
member.setId(rs.getLong("id"));
member.setName(rs.getString("name"));
return member;
}
};
}
- 생성자가 하나일 경우에는 Autowired 어노테이션을 생략할 수 있다.
- 기존 코드보다 훨씬 간단해진 것을 알 수 있다.
- 그 이유는 템플릿 메서드 패턴과 콜백 메소드를 활용해 코드를 최대한 압축시킨 결과이기 때문이다.
4. 주입해주기 (SpringConfig.java)
package hello.hellospring;
import hello.hellospring.repository.JdbcMemberRepository;
import hello.hellospring.repository.JdbcTemplateMemberRepository;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class SpringConfig {
private final DataSource dataSource;
@Autowired
public SpringConfig(DataSource dataSource) {
this.dataSource = dataSource;
}
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
// return new MemoryMemberRepository();
// return new JdbcMemberRepository(dataSource);
return new JdbcTemplateMemberRepository(dataSource);
}
}
5. 테스트케이스 빌드해보기
- 오류가 발생한다.
- 테스트 케이스의 장점임! 오류가 발생한 곳은?
6. 코드 수정하기
@Override
public Optional<Member> findById(Long id) {
List<Member> result = jdbcTemplate.query("select * from member where id = ?", memberRowMapper(), id);
return result.stream().findAny();
}
@Override
public Optional<Member> findByName(String name) {
List<Member> result = jdbcTemplate.query("select * from member where name = ?", memberRowMapper(), name);
return result.stream().findAny();
}
- 파라미터 수정이 제대로 안돼있었음.
7. 수정하고 다시 빌드해보기
- 빌드 성공!
- Jdbc Template 로 정상적으로 변경하였다.
- 테스트케이스는 실무에서 정말 중요하다.
- 실무에서는 테스트코드 작성하는 시간이 7~80%이고, 2~30%만 프로덕션 코드를 작성한다.
- 프로젝트가 커질 수록 조그만 버그 하나하나가 수십억의 손해로 돌아올 수 있기 때문에 그만큼 테스트코드는 중요하다.
반응형
'Java Spring > 스프링 입문' 카테고리의 다른 글
[Java Spring] 1-23. 스프링 데이터 JPA (0) | 2023.01.30 |
---|---|
[Java Spring] 1-22. JPA (1) | 2023.01.30 |
[Java Spring] 1-20. 스프링 통합 테스트 (0) | 2023.01.30 |
[Java Spring] 1-19. 순수 JDBC (0) | 2023.01.30 |
[Java Spring] 1-18. H2 데이터베이스 설치 (0) | 2023.01.30 |
Comments