객체임...
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 매서드는 주로
형태로 사용된다
RowMapper은 실행결과를 자바 객체로 변환할 때 사용된다
첫 줄의 "select * from MEMBER where EMAIL = ?"
의 ?은 뒤에 있는 email
이 대입된다
따라서 특정 이메일을 가진 데이터를 가져오는 쿼리가 된다...
임의 클래스를 이용해서 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;
},
임의 클래스 사용 없이 람다로도 표현 가능
안의 데이터 수를 세는 메서드같은 경우 List로 받는것보다 Integer로 받는 것이 편하다
이때 사용하는 메서드.
주로 T queryForObject(String sql, Class<T> requiredType)
로 사용된다
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()
);
}