Spring Jdbc Templete

이주희·2022년 8월 10일
0

spring

목록 보기
9/16

Jdbc Templete

객체임...
Jdbc Templete를 이용하면 편하게 쿼리를 실행할 수 있음
인자로 DataSource가 필요하다

사용법

JdbcTemplete 객체를 생성하는 코드를 씀
그리고 생성자를 통해 위의 JdbcTemplete에 dataSource를 주입해줌

public class MemberDao{
    private JdbcTemplate jdbcTemplate;
    public MemberDao(DataSource dataSource){
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }
}

예제

// email로 member 찾음
    public Member selectByEmail(String email){
        return map.get(email);
    }

원래 list를 사용하면 위와 같은 코드를

public Member selectByEmail(String email){
        List<Member> results = jdbcTemplate.query(
                "select * from MEMBER where EMAIL = ?",
                new RowMapper<Member>(){
                    @Override
                    public Member mapRow(ResultSet rs, int rowNum)
                        throws SQLException {
                        Member member = new Member(
                                rs.getString("EMAIL"),
                                rs.getString("PASSWORD"),
                                rs.getString("NAME"),
                                rs.getTimestamp("REGDATE").toLocalDateTime());
                        member.setId(rs.getLong("ID"));
                        return member;
                        }

                },

        email);
        return results.isEmpty()?null:results.get(0);
    }

이렇게 변형할 수 있다

query()

query 매서드는 주로

  • List < T > query(String sql, RowMapper< T > rowMapper)
  • List < T > query(String sql, Object[] args, RowMapper< T > rowMapper)
  • List < T > query(String sql, RowMapper< T >, rowMapper, Object ...args)

형태로 사용된다

RowMapper은 실행결과를 자바 객체로 변환할 때 사용된다

String sql

첫 줄의 "select * from MEMBER where EMAIL = ?" 의 ?은 뒤에 있는 email 이 대입된다

따라서 특정 이메일을 가진 데이터를 가져오는 쿼리가 된다...

RowMapper < T > rowMapper

임의 클래스를 이용해서 RawMapper의 객체를 전달해주고 있음

RowMapper은 ResultSet에서 데이터를 읽어와 Member 객체로 변환해주는 기능을 한다

안의 임의 클래스는 ResultSet를 이용해 Member 객체 생성 역할을 한다

(ResultSet rs, int rowNum) -> {
                        Member member = new Member(
                                rs.getString("EMAIL"),
                                rs.getString("PASSWORD"),
                                rs.getString("NAME"),
                                rs.getTimestamp("REGDATE").toLocalDateTime());
                        member.setId(rs.getLong("ID"));
                        return member;      
                },

임의 클래스 사용 없이 람다로도 표현 가능

queryForObject()

안의 데이터 수를 세는 메서드같은 경우 List로 받는것보다 Integer로 받는 것이 편하다

이때 사용하는 메서드.

주로 T queryForObject(String sql, Class<T> requiredType) 로 사용된다

update()

INSERT, UPDATE, DELETE 쿼리는 주로 update 메서드를 사용

int update(String sql, Object args...)

리턴값은 변경된 행의 개수
ex)

public void update(Member member){
        jdbcTemplate.update(
                "update MEMBER set NAME = ?,PASSWORD = ? where EMAIL = ?",
                member.getName(), member.getPassword(), member.getEmail()
        );
    }

0개의 댓글