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 |