스프링 입문 맛보기 7

Spring 정리 2021. 8. 5. 13:13

인프런 강의 15일차.

 - 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (김영한 강사님)

 

1. 스프링 JdbcTemplate

 - 순수 Jdbc와 동일한 환경설정을 하면 된다.

 - 스프링 JdbcTemplate과 MyBatis 같은 라이브러리는 JDBC API에서 본 반복 코드를 대부분 제거해준다. 하지만 SQL은 직접 작성해야한다.

 

* 스프링  JdbcTemplate 회원 리포지토리

private final JdbcTemplate jdbcTemplate; 	//jdbc 템플릿을 선언해줘야함

@Autowried
public JdbcTemplateMemberRepository(DataSource dataSource){		//스프링이 데이터소스 자동으로 Injection 해줌
	jdbcTemplate = new JdbcTemplate(dataSource);
}


@Override
public Optional<Member> findById(Long id){
	List<Member> result = jdbcTempalte.query("select * FROM member where id = ?", memberRowMapper(), id);
    return result.stream().findAny();
}

@Override
public Optional<Member> findByName(String name){
	List<Member> result = jdbcTempalte.query("select * FROM member where name = ?", memberRowMapper(), name);
    return result.stream().findAny();
}

@Override
public Optional<Member> findAll(Long id){
	return jdbcTempalte.query("select * FROM member", memberRowMapper());
}

@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;
}


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;
  	}
  }
  /* 위와 동일한 로직을 lambda 형태로 변환
  return (rs, rowNum) -> {
    Member member = new Member();
    member.setId(rs.getLong("id"));
    member.setName(rs.getString("name"));
    return member;
  }
  */
}

'Spring 정리' 카테고리의 다른 글

스프링 입문 맛보기 9  (0) 2021.08.05
스프링 입문 맛보기 8  (0) 2021.08.05
스프링 입문 맛보기 6  (0) 2021.08.04
스프링 입문 맛보기 5  (0) 2021.07.14
스프링 입문 맛보기 4  (0) 2021.07.06