티스토리 뷰
Spring JDBC 6-3 JdbcTemplate API 사용
queryForInt() 메서드
Select 문을 실행하여 하나의 정수값을 받아내기 위해 사용
int count = getJdbcTemplate().queryForInt("select count(*) from users");
int boardCount = getJdbcTemplate().queryForInt(
"select count(*) from board where category_no = ?", "CATEGORY-00001");
queryForObject() 메서드
SQL 문 수행결과가 하나의 Object로 리턴되는 경우 이용
전달하는 파라미터는 Object의 배열형 -> 순서대로 ?에 삽입됨
리턴받고자하는 타입명을 명시해야 함.
String name = getJdbcTemplate().queryForObject(
"select name from users where id = ?", new Object[]{"test"}, String.class);
query() 메서드
select의 실행 결과가 여려목록으로 리턴되는 경우 사용
sql 문 수행 결과는 Collection 으로 리턴
3개의 매개변수
sql문(String), 필요 파라미터(Object 배열), 실행 결과를 매핑할 RowMapper
Object[] args = {"%"+searchKeyword+"%"};
ArrayList list = getJdbcTemplate().query("select * from users where user_name like ?",
args, new UserRowMapper());
RowMapper
select 수행 결과를 단순한 정수나 문자열로 담지 않고 VO(Value Object)에 담고자 하는 경우, select한 결과와 VO객체의 속성을 매핑함.
RowMapper 인터페이스를 구현한 클래스를 작성한 후 매핑정보를 담고, 그것을 JdbcTemplate 메서드의 인자로 전달함.
Anonymous Inner Class 형태
private final String USER_GET = "select * from users where id=?";
public UserVO getUser(UserVO vo) {
Object[] args = {vo.getId()};
return (UserVO)getJdbcTemplate().queryForObject(USER_GET, args,
new RowMapper<UserVO>(){
public UserVO mapRow(ResultSet rs, int rowNum) throws SQLException {
UserVO user = new UserVO();
user.setId(rs.getString("USER_ID"));
user.setPassword(rs.getString("PASSWORD"));
user.setName(rs.getString("NAME"));
user.setRole(rs.getString("ROLE"));
return user;
}
}
);
}
RowMapper - 이어서
query() 메서드에서도 RowMapper사용
private final String USER_LIST = "select * from users order by name desc";
public ArrayList<UserVO> getUserList(UserVO vo) {
Object[] args = new Object[0];
return (ArrayList<UserVO>)getJdbcTemplate().query(USER_LIST, args,
new RowMapper<UserVO>(){
public UserVO mapRow(ResultSet rs, int rowNum) throws SQLException {
UserVO user = new UserVO();
user.setId(rs.getString("USER_ID"));
user.setPassword(rs.getString("PASSWORD"));
user.setName(rs.getString("NAME"));
user.setRole(rs.getString("ROLE"));
return user;
}
}
);
}
RowMapper 클래스 구현
재사용성을 위해 별도의 외부 클래스를 정의하여 사용
private final String USER_GET = "select * from users where id=?";
private final String USER_LIST = "select * from users order by name desc";
public UserVO getUser(UserVO vo) {
Object[] args = {vo.getId()};
return (UserVO)getJdbcTemplate().queryForObject(
USER_GET, args, new UserRowMapper());
}
public ArrayList<UserVO> getUserList(UserVO vo) {
Object[] args = new Object[0];
return (ArrayList<UserVO>)getJdbcTemplate().query(
USER_LIST, args, new UserRowMapper());
}
class UserRowMapper implements RowMapper<UserVO> {
public UserVO mapRow(ResultSet rs, int rowNum) throws SQLException {
UserVO user = new UserVO();
user.setId(rs.getString("USER_ID"));
user.setPassword(rs.getString("PASSWORD"));
user.setName(rs.getString("NAME"));
user.setRole(rs.getString("ROLE"));
return user;
}
}
update 메서드
insert, update, delete 수행을 위해 사용
private final String USER_ADD = "insert into users(id, pass, name) values(?,?,?)";
public void addUser(UserVO vo) {
getJdbcTemplate().update(USER_ADD, vo.getId(), vo.getPass(), vo.getName());
}
매개변수값과 타입을 배열 형태로 전달 가능
private final String USER_UPDATE = "update users set name=?, role=? where id=?";
public void updateUser(UserVO vo) {
Object[] params = {vo.getName(), vo.getRole(), vo.getId()};
int[] types = {Types.VARCHAR, Types.VARCHAR, Types.VARCHAR};
getJdbcTemplate().update(USER_UPDATE, params, types);
}
PreparedStatementSetter 이용
파라미터 값을 순서대로가 아닌 프로그램에서 직접 지정하는 방법 제공
private final String USER_ADD = "insert into users(id, pass, name) values(?,?,?)";
public void addUser(final UserVO vo) {
getJdbcTemplate().update(USER_ADD, new PreparedStatementSetter () {
public void setValues(PreparedStatement stmt) throws SQLException {
stmt.setString(1, vo.getId());
stmt.setString(2, vo.getPass());
stmt.setString(3, vo.getName());
}
});
}
- #공무원시험
- #한능검2주
- #한능검
- #드라마추천
- #시스템관리자
- #에듀윌한국사
- #psat
- #한능검심화
- #한능검기본
- #티빙
- #드라마촬영지
- #mbc드라마
- #한국사능력검정시험
- #tvn드라마
- #셸스크립트
- #개발꿀팁
- #k드라마
- #자동화
- #9급공무원
- #최태성한국사
- #판타지로맨스
- #한능검공부법
- #큐넷
- #bash
- #드라마ost
- #공무원준비
- #한능검단기합격
- #해커스한국사
- #공시생
- #코딩초보
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |