앞서 했던 insert, update, delete와 다르게 select는 객체를 리턴하고, ResultSet클래스를 이용하므로 따로 작업하였다.
ResultSet
DeptSystem(메인 메소드), MenuUI(인터페이스 AbstractUI상속), DeptDAOImpl(인터페이스 DeptDAO상속)
이 구성에서 추가로 인터페이스 RowMapper를 상속받는 클래스를 만들어 mapRow메소드를 이용해 값을 읽어줘야 한다.
RowMapper란?
Jdbc Template에서 행 단위로 ResultSet의 행을 매핑하는 데 사용하는 인터페이스로, 각 행을 결과 객체에 매핑하는 실제 작업을 수행한다.
- 부서 이름으로 해당하는 부서의 정보 찾기
우선 CustomerRowMapper클래스의 mapRow호출하기 위해 query(여러 개 리턴), queryForObject(하나만 리턴) 메소드를 이용한다.
@Component
public class DeptDAOImpl implements DeptDAO{
private JdbcTemplate mytemplate;
@Autowired
public DeptDAOImpl(JdbcTemplate mytemplate) {
super();
this.mytemplate = mytemplate;
}
@Override
public List<DeptDTO> findByDept(String deptname) {
return mytemplate.query("select * from mydept where deptname like ?", new Object[] {"%"+deptname+"%"}, new DeptRowMapper());
}
}
=> new DeptRowMapper() → DeptRowMapper클래스의 mapRow메소드 호출
new Object[] {id} → 어떤 값이 들어올지 모르기 때문에 Object타입으로 해둠, 파라미터로 받는 ?값 세팅
package dept;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
public class DeptRowMapper implements RowMapper<DeptDTO>{
@Override
public DeptDTO mapRow(ResultSet rs, int rowNum) throws SQLException {
DeptDTO user = new DeptDTO(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5));
return user;
}
}
=> RowMapper의 추상메소드인 mapRow를 오버라이딩하여 ResultSet으로 데이터 읽고 담아서 리턴하기.
findByDept() 메소드를 호출한 곳으로 돌아가서 리턴받은 값 출력하기
@Override
public void findByDept() {
System.out.println("*******부서검색(부서명)*******");
System.out.println("부서명:");
String deptname = key.next();
List<DeptDTO> list = dao.findByDept(deptname);
for(DeptDTO user:list) {
System.out.println(user);
}
}
=> 여러 개의 정보를 담아야 하므로 DeptDTO타입 List클래스로 리턴 값을 받아준다.
***********주의할 점***********
1) 쿼리문 리턴할 때 query(단일 행)메소드와, queryForObject(객체)메소드 사용 잘 구분하기
2) ?값 셋팅할 때 변수이름, 갯수 잘 지키기
'Spring' 카테고리의 다른 글
2022-11-30 스프링 MVC Controller로 게시판 만들기 (0) | 2022.11.30 |
---|---|
2022-11-29 스프링 MVC프로젝트 생성하기 정리 (0) | 2022.11.29 |
2022-11-28 스프링 jdbc(DB연결) - CRUD (0) | 2022.11.28 |
2022-11-25 IoC(제어의 역전), DI(의존관계 주입) - annotation을 이용해 객체 생성하기 리뷰 (0) | 2022.11.26 |
2022-11-25 IoC(제어의 역전), DI(의존관계 주입) - setter메소드를 이용해 객체 생성하기 리뷰 (0) | 2022.11.26 |
댓글