[JDBC #6] JDBC Template을 활용한 JDBC 편리하게 이용하기
2024. 11. 6. 19:04ㆍ데이터베이스/JDBC
JDBC Template 사용 이유
Spring에서는 반복적인 JDBC 코드를 간소화하기 위해 JdbcTemplate을 제공한다.
JdbcTemplate은 SQL 실행, 파라미터 바인딩, 예외 처리, 리소스 정리 등을 자동으로 처리해주므로,
개발자는 비즈니스 로직에만 집중할 수 있다.
JDBC Template 선언 방법
1) DataSource 주입 방법
public class Test {
private final JdbcTemplate template;
public Test(DataSource dataSource) {
this.template = new JdbcTemplate(dataSource);
}
}
2) @Autowired 사용
@Component
public class JDBCTemplateRepo {
@Autowired
public JdbcTemplate jdbcTemplate;
@Autowired
public NamedParameterJdbcTemplate namedParameterJdbcTemplate;
}
데이터 삽입, 수정, 삭제 (update 메서드 사용)
update() 메서드는 INSERT, UPDATE, DELETE와 같이 반환값이 필요 없는 SQL문을 실행할 때 사용한다.
public void save(Member member) {
jdbcTemplate.update("INSERT INTO MEMBER(name, age, addr) VALUES (?, ?, ?)",
member.getName(),
member.getAge(),
member.getAddr());
}
public void delete(String name) {
jdbcTemplate.update("DELETE FROM MEMBER WHERE name = ?", name);
}
데이터 조회 (query, queryForObject)
조회 시에는 RowMapper를 사용하여 결과를 객체로 매핑해야 한다.
public List<Member> findAll() {
return jdbcTemplate.query("SELECT * FROM MEMBER", memberRowMapper());
}
public Member findByName(String name) {
return jdbcTemplate.queryForObject("SELECT * FROM MEMBER WHERE name = ?", memberRowMapper(), name);
}
private RowMapper<Member> memberRowMapper() {
return (rs, rowNum) -> {
Member member = new Member();
member.setName(rs.getString("name"));
member.setAge(rs.getInt("age"));
member.setAddr(rs.getString("addr"));
return member;
};
}
- query()는 결과가 여러 개일 때 사용하며 List를 반환한다.
- queryForObject()는 단일 객체를 반환할 때 사용한다. 결과가 없거나 2개 이상이면 예외가 발생한다.
NamedParameterJdbcTemplate 사용법
이름 기반의 파라미터를 사용할 수 있어 가독성이 좋고 파라미터 순서 실수를 방지할 수 있다
public void namedSave(Member member) {
Map<String, Object> param = new HashMap<>();
param.put("name", member.getName());
param.put("age", member.getAge());
param.put("addr", member.getAddr());
namedParameterJdbcTemplate.update(
"INSERT INTO MEMBER(name, age, addr) VALUES (:name, :age, :addr)", param);
}
JdbcTemplate 요약
Method | 설명 |
update(...) | INSERT, UPDATE, DELETE에 사용함 |
query(...) | 결과가 여러 개인 SELECT 쿼리에 사용함 (List 반환) |
queryForObject(...) | 단일 결과 SELECT 쿼리에 사용함 (Object 반환) |
RowMapper | ResultSet을 도메인 객체로 매핑하는 함수형 인터페이스 |
NamedParameterJdbcTemplate |
'데이터베이스 > JDBC' 카테고리의 다른 글
[@Transactional] 스프링이 제공해주는 트랜잭션 이해하기 (0) | 2024.11.06 |
---|---|
[JDBC #5] Transaction Template을 활용한 간단한 트랜잭션 적용 (1) | 2024.11.06 |
[JDBC #4] PlatformTransactionManager을 통한 트랜잭션 관리 (0) | 2024.11.05 |
[JDBC #3] 순수 JDBC와 트랜잭션 이해하기 (0) | 2024.11.05 |