ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 인프런 스프링 입문 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
Designed by Tistory.