웹 & 프레임워크

Spring 과 jdbcTemplate을 이용한 예제 queryForObject

늘근이 2014. 5. 25. 22:39

Spring과 Mybatis가 더 나은 선택으로 보이지만, 어쨌든 jdbcTemplate도 사용하기 나쁘지않다.


queryForObject(String sql, Class type, Object args...)

얘가 해주는 일은 참 많다


 

Connection획득,

PrepareStatement생성,

PrepareStatement값 바인딩

ResultSet 처리

Exception처리


하지만 유의해야할점이 있는데


이거는 반드시 하나 있는 메소드에 쓰임. 값이 하나 안오면 exception이 발생함

걍 resultsetextractor인터페이스를 구현할걸 넘기거나

query로 가는게 낫다고한다



 package com.gorakgarak.dao;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.List;

 

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.jdbc.core.RowMapper;

 

import com.gorakgarak.entity.Director;

 

public class DirectorDAOImpl implements DirectorDAO {

      

       private JdbcTemplate jdbcTemplate;

      

       public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {

             this.jdbcTemplate = jdbcTemplate;

       }

 

       @Override

       public void insert(Director director) {

             jdbcTemplate.update(MappedSQL.INSERT_DIRECTOR, director.getId(), director.getName(),

             director.getAge(),director.getWinnerCount());

            

 

       }

 

       public int selectDirectorAgeById(String id) {

             return jdbcTemplate.queryForObject(MappedSQL.SELECT_DIRECTOR_BY_AGE, Integer.class, id);

       }

      

       @Override

       public Director selectDirectorById(String id) {

            

             //T queryForObject(,RowMapper<T>,)

             return jdbcTemplate.queryForObject(MappedSQL.SELECT_DIRECTOR_BY_ID,newDirectorMapper(),id);

            

       }

 

       @Override

       public List<Director> selectDirectorList() {

             return jdbcTemplate.query(MappedSQL.SELECT_DIRECTOR, new DirectorMapper());

       }

 

       @Override

       public void deleteDirector(String id) {

             jdbcTemplate.update(MappedSQL.DELETE_DIRECTOR,id);

 

       }

 

       @Override

       public void updateDirector(Director director) {

      jdbcTemplate.update(MappedSQL.UPDTAE_DIRECTOR,director.getAge(),director.getWinnerCount(),director.getId());

       }

      

      

       private class DirectorMapper implements RowMapper<Director>{

 

             @Override

             public Director mapRow(ResultSet rs, int rowNum) throws SQLException {

                    //if for처리안함!

                    return newDirector(rs.getString("director_id"),rs.getString("director_name"),

                    rs.getInt("director_age"),rs.getInt("director_winnercount"));

                   

                   

             }

 

            

       }

      

 

}