Java/Spring

[Spring]JdbcTemplate

뉴벡엔드 2024. 3. 28. 12:06

JdbcTemplate

 

JdbcTemplate은 Spring Framework의 일부로, JDBC 작업을 단순화하고 일반적인 오류를 방지하는 데 도움이 되는 중앙 클래스

 

JDBC API를 사용하지만 JDBC API의 많은 문제를 제거하는 강력한 메커니즘이며, 트랜잭션 관리 및 리소스 관리 등을 자동으로 해주어 JDBC를 매우 편리하게 사용할 수 있게 도와줌

 

하지만 동적 쿼리문을 해결하기 어렵다.


사용예시

 

DB는 h2 사용

 

  • application.properties
spring.datasource.url = jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa

 

 

  • SpringConfig.java
@Configuration
public class SpringConfig {

    private DataSource dataSource;
 
    @Autowired
    public SpringConfig(DataSource dataSource) {
        this.dataSource = dataSource;
    }
    
    @Bean
    public MemberService memberService() {
        return new MemberService(memberRepository());
    }
    
    @Bean
    public MemberRepository memberRepository() {
        return new JdbcTemplateMemberRepository(dataSource);
    }

}

 

 

  • JdbcTemplateMemberRepository.java
public class JdbcTemplateMemberRepository implements MemberRepository{

    private final JdbcTemplate jdbcTemplate;

    public JdbcTemplateMemberRepository(DataSource dataSource) {
        this.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 (rs, rowNum) -> {
            Member member = new Member();
            member.setId(rs.getLong("id"));
            member.setName(rs.getString("name"));
            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;
        }
    };
    /*
}
    
    
}

 

 

반응형

'Java > Spring' 카테고리의 다른 글

[Spring]Model 객체와 @ModelAttribute  (0) 2024.04.02
[Spring]MariaDB 연동  (0) 2024.03.28
[Spring]AOP  (0) 2024.03.28
[Spring] 스프링 빈 등록하는 방법  (0) 2024.03.27
[Spring]window에서 bulid 후 실행  (0) 2024.03.27