-
인프런 스프링 입문 09 / 스프링 JDBCTemplate스프링&스프링부트 2022. 12. 14. 23:56
스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링 DB 접근 기술
스프링 JDBCTemplate
- 순수한 JDBC와 동일한 환경설정
- 스프링 JDBCTemplate과 MyBatis 같은 라이브러리는 JDBC API에서 본 반복 코드를 제거, SQL은 직접 작성
@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 MemoryMemberRepository(); // return new JdbcMemberRepository(dataSource); return new JdbcTemplateMemberRepository(dataSource); } }
public class JdbcTemplateMemberRepository implements MemberRepository { private final JdbcTemplate jdbcTemplate; //생성자가 1개일 때, @Autowired 생략 가능 //@Autowired 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(), 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(); } @Override public List<Member> findAll() { return jdbcTemplate.query("select * from member", memberRowMapper()); } 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; // }}; //alt + enter 로 lambda로 변형 return (rs, rowNum) -> { Member member = new Member(); member.setId(rs.getLong("id")); member.setName(rs.getString("name")); return member; }; } }
하지만... 테스트를 실행해보면 오류가 발생한다
어노테이션이 빠진 것 같은데...
내일 오류 해결해보자
728x90'스프링&스프링부트' 카테고리의 다른 글
인프런 스프링 입문 11 / AOP (0) 2022.12.18 인프런 스프링 입문 10 / JPA, 스프링 데이터 JPA (0) 2022.12.15 인프런 스프링 입문 08 / 스프링 DB 접근, H2, JDBC (0) 2022.12.06 인프런 스프링 입문 07 / 회원관리 예제 (0) 2022.12.06 인프런 스프링 입문 06 / 스프링 빈 등록 2 가지 (0) 2022.12.04