Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- pointcut
- SpringBoot
- JDBC
- 인프런
- db
- Greedy
- 스프링 핵심 원리
- 그리디
- 자바
- Spring Boot
- 스프링 핵심 기능
- kotlin
- http
- 백준
- Proxy
- Thymeleaf
- springdatajpa
- QueryDSL
- JPQL
- java
- Android
- AOP
- 김영한
- 알고리즘
- 스프링
- transaction
- jpa
- Exception
- Servlet
- spring
Archives
- Today
- Total
개발자되기 프로젝트
JdbcTemplate 본문
JdbcTemplater과 같은 라이브러리는 JDBC API의 반복 코드를 대부분 제거해줌!
하지만 SQL은 직접 작성해야함!
1. JdbcTemplate사용
JdbcTemplate를 사용하기 위해서는 생성자를 통해 DataSource를 주입받아서 jdbcTemplate를 생성하면 된다.
public class JdbcTemplateMemberRepository implements MemberRepository{
private final JdbcTemplate jdbcTemplate;
@Autowired //생성자가 하나면 @Autowired생략 가능.
public JdbcTemplateMemberRepository(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
2. findById
query : id가 ?와 일치하는 entity를 member table에서 가져와라.
@Override
public Optional<Member> findById(Long id) {
List<Member> result = jdbcTemplate.query("select * from member where id = ?", memberRowMapper(), id);
return result.stream().findAny();
}
3. memberRowMapper??
RowMapper를 통해 ResultSet으로부터 member의 각 field를 set해줄 수 있다.
private RowMapper<Member> memberRowMapper(){
return new RowMapper<Member>() {
@Override
public Member mapRow(ResultSet rs, int rowNum) throws SQLException {
Member member = new Member();
member.setId(rs.getLong("id"));
member.setName(rs.getString("name"));
return member;
}
}
}
아래와 같이 람다식으로 변경도 가능하다.
private RowMapper<Member> memberRowMapper(){
return (rs, rowNum) -> {
Member member = new Member();
member.setId(rs.getLong("id"));
member.setName(rs.getString("name"));
return member;
};
}
4. save()
- SimpleJdbInsert에 wishTableName("table_name"), usingGeneratedKeyColumns("PK")를 넣어주면
- query를 짤 필요 없음. Table명, PK있으니 고정도는 해줌 ㅋㅋ
- Map을 통해 "name"에 멤버의 이름을 맵핑
- executeAndREturnKey를 통해 key를 받아서 member에 id를 set한다.
@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;
}
5. findAll()
- RowMapper에서 리스트로 넘어옴.
@Override
public List<Member> findAll() {
return jdbcTemplate.query("select * from member", memberRowMapper());
}
6. SpringConfig
Repository를 바꿔치기하자.
@Bean
public MemberRepository memberRepository(){
//return new MemoryMemberRepository();
//return new JdbcMemberRepository(dataSource);
return new JdbcTemplateMemberRepository(dataSource);
}
7. 통합 테스트 : 통과
테스트 코드를.. 정말..잘.. 꼼꼼하게 작성해보자
8. GitHub : 210722,JdbcTemplate
'Spring Boot' 카테고리의 다른 글
AOP (0) | 2021.07.24 |
---|---|
Spring Data JPA (0) | 2021.07.24 |
스프링 통합 테스트 (0) | 2021.07.23 |
Jdbc활용하여 Application에서 DB로 넘겨보자. (0) | 2021.07.23 |
H2 Database 설치 및 사용 법 (0) | 2021.07.23 |
Comments