이때 mapRow 메서드의 rs는 ResultSet 객체, rowNum은 결과로 받은 sql 행의 개수라고 생각하면 된다.
그리고 만든 클래스의 객체를 생성하여 위와 같이 queryForObject()로 넘겨주면 Role 객체를 얻어올 수 있다.
아래 코드와 같이 클래스를 만들지 않고 필드(Field)로 선언하여 사용할 수도 있다.
Java
혹은 아래와 같이 queryForObject를 사용할 때, 람다(lambda)식을 통해 선언하는 방식도 사용할 수 있다.
Java
Synapse Map Insight
queryForObject(쿼리문, 반환할 클래스,?에 전달할 인자)// 단건 조회
// RoleDaoSqls.java (sql문을 모아놓은 java 클래스 파일)publicstaticfinalString SELECT_ID ="SELECT role_id FROM role where description=?";// RoleDao.javapublicList<Integer>selectId(String description){returnthis.jdbcTemplate.queryForList(SELECT_ID,Integer.class, description);}// main.javaApplicationContext ac =newAnnotationConfigApplicationContext(ApplicationConfig.class);RoleDao roleDao = ac.getBean(RoleDao.class);Integer roleId = roleDao.selectId("Developer");// Integer list = roleDao.selectId("CEO"); -> Incorrect result size: expected 1, actual 2 에러System.out.println(roleId);
// RoleDaoSqls.javapublicstaticfinalString SELECT_ONE_ROW ="SELECT role_id, description FROM role WHERE role_id=?";// RoleMapper.javapublicclassRoleMapperimplementsRowMapper<Role>{@OverridepublicRolemapRow(ResultSet rs,int rowNum)throwsSQLException{Role role =newRole(); role.setRoleId(rs.getInt("role_id")); role.setDescription(rs.getString("description"));return role;}}// RoleDao.javapublicRoleselectOneRow1(int roleId){returnthis.jdbcTemplate.queryForObject(SELECT_ONE_ROW,newRoleMapper(), roleId);}// main문publicstaticvoidmain(String[] args){ApplicationContext ac =newAnnotationConfigApplicationContext(ApplicationConfig.class);RoleDao roleDao = ac.getBean(RoleDao.class);Role role = roleDao.selectOneRow1(100);System.out.println(role);}