스프링 db1 - JdbcTemplate
2023. 1. 30. 15:05ㆍspring/db
1/30
* 트랜잭션 처리 코드 문제 (반복, DI/OCP 원칙 X , 복잡)
- - 트랜잭션을 처리하기 위한 코드를 작성하다 보니 비지니스 로직보다 트랜잭션 처리 코드가 더 길어졌다.
- - 커넥션을 트랜잭션 동기화 매니저 -> 쓰레드 로컬에 보관 후 로직 수행시 트랜잭션이 시작된 커넥션을 반환받아 사용하는 방법으로 변경
- - 하지만 트랜잭션 처리 코드가 반복되어 TransactionTemplate이 등장. 최소화되었지만 서비스 계층에서 트랜잭션을 처리하는 기술 로직이 들어가있는 것은 동일했다.
- - 스프링 AOP @Transactional 등장. 해당 로직에 트랜잭션을 설정하면 트랜잭션 기능을 처리해준다. (데이터소스와 트랜잭션 매니저는 설정해주면 스프링 컨테이너가 알아서 해준다.
* 예외 처리 (반복, 특정 예외 처리)
- - SQLException 예외는 체크 예외라서 throw가 필수이다. 그래서 계속 종속된다.
- - 제거하기 위해 런타임예외를 직접 만들어서 SQLException 예외를 둘러싸서 만든 예외를 던져줌으로써 throw절 제거
- - 특정 예외를 처리하기 위해선 오류코드에 조건을 걸어서 또 다른 예외로 던져줘야 한다.
- - 오류 변환기 등장. (SQLErrorCodeSQLExceptionTranslator)
* JdbcTemplate
- Jdbc 반복 문제 해결 (getConnection, try-catch , close 등)
- 템플릿 콜백 패턴
public class MemberRepositoryV5 implements MemberRepository{
private final JdbcTemplate template;
private final DataSource dataSource;
public MemberRepositoryV5(DataSource dataSource)
{
this.dataSource = dataSource;
this.template = new JdbcTemplate(dataSource);
}
- JdbcTemplate(파라미터 : 데이터소스) 를 주입 받도록 설정
* 코드 예시
public Member save(Member member) {
String sql = "insert into member(member_id, money) values(?, ?)";
template.update(sql, member.getMemberId(), member.getMoney()); //-> update된 숫자 반환해준다.
return member;
}
- update() -> 1. sql문장 2. 파라미터
- 업데이트된 수가 반환된다.
public Member findById(String memberId) {
String sql = "select * from member where member_id = ?";
Member member = template.queryForObject(sql, memberRowMapper(), memberId);
return member;
}
- queryForObject() -> 한개만 찾을때 사용
- queryForObject() -> 1. sql문장 2. rowMapper 3. 파라미터
private RowMapper<Member> memberRowMapper() {
return (rs, rowNum) -> {
Member member = new Member();
member.setMemberId(rs.getString("member_id"));
member.setMoney(rs.getInt("money"));
return member;
};
}
'spring > db' 카테고리의 다른 글
스프링 db2 - MyBatis (0) | 2023.02.01 |
---|---|
스프링 db2 - JdbcTemplate 사용 정보 (0) | 2023.01.31 |
스프링 db - 예외 처리 반복 해결 (0) | 2023.01.30 |
스프링 DB1 - 스프링 트랜잭션 (0) | 2023.01.27 |
스프링 DB1 - JDBC 구조(DataSource, 커넥션풀, 트랜잭션 등) (0) | 2023.01.26 |