spring로 검색한 결과 :: 시소커뮤니티[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

회원가입 I 비밀번호 찾기


SSISO Community검색
SSISO Community메뉴
[카페목록보기]
[블로그등록하기]  
[블로그리스트]  
SSISO Community카페
블로그 카테고리
정치 경제
문화 칼럼
비디오게임 스포츠
핫이슈 TV
포토 온라인게임
PC게임 에뮬게임
라이프 사람들
유머 만화애니
방송 1
1 1
1 1
1 1
1 1
1

spring로 검색한 결과
등록일:2008-06-11 11:28:12
작성자:
제목:Spring JDBC - 2.구현방법


spring  JDBC에서는  JDBC에서  지원하던  기능들을  [표4-6]의  API를  이용하고  지원하고  있다.  데이터베이스와의  Connection을  관리하기  위하여  DataSource만을  이용하고  있으며,  쿼리를  실행하는  방법으로는  JdbcTemplate과  SQLObject  두  가지  방식을  지원하고  있다.  이  두  가지  방법으로  쿼리를  실행하는  쿼리를  실행하는  과정을  살펴보면서  각각의  장단점에  대해서  살펴보도록  하겠다.  또한  JDBC에서  ResultSet과  RowSet으로  반환되던  쿼리  결과는  POJO  List  또는  Map으로  변환할  수  있다.

  

*  JdbcTemplate  기반  하에서  구현

JdbcTemplate을  이용하는  방법은  모든  클래스를  JdbcTemplate클래스가  가지고  있는  메소드를  이용하여  실행하는  것이다.

  

[예제4-6]  springJDBCWithTemplateBoardDAO.java

public  class  springJDBCWithTemplateBoardDAO  extends  MyJdbcDaoSupport  implements
    BoardDAO  {

  

  ...  중간  생략  ...

  

  public  Board  insert(Board  board)  throws  DataAccessException  {
    String  sql  =  getMessageSourceAccessor().getMessage("board.sql.insert");
    int  boardNo  =  getIncrementer().nextIntValue();
    board.setBoardNo(boardNo);
    Object[]  values  =  {  new  Integer(boardNo),  board.getTitle(),
        board.getName(),  board.getEmail(),  board.getPassword(),
        board.getCreateDate(),  board.getContent()  };

    getJdbcTemplate().update(sql,  values);

    return  board;
  }

  

  public  Board  update(Board  board)  throws  DataAccessException  {
    String  sql  =  getMessageSourceAccessor().getMessage("board.sql.update");
    Object[]  values  =  {  board.getTitle(),  board.getName(),
        board.getEmail(),  board.getContent(),
        new  Integer(board.getBoardNo())  };
    getJdbcTemplate().update(sql,  values);

    return  board;
  }

  

  ...  중간  생략  ...

  

  public  Board  findBoard(int  boardNo)  throws  DataAccessException  {
    String  sql  =  getMessageSourceAccessor().getMessage(
        "board.sql.select.byboardno");

    RowMapper  rowMapper  =  new  RowMapper()  {
      public  Object  mapRow(ResultSet  rs,  int  rownum)  throws  SQLException  {
        Board  board  =  new  Board();
        board.setTitle(rs.getString("title"));
        board.setName(rs.getString("name"));
        board.setEmail(rs.getString("email"));
        board.setPassword(rs.getString("password"));
        board.setCreateDate(rs.getString("createdate"));
        board.setContent(rs.getString("content"));
        board.setHitCount(rs.getInt("hitCount"));

        return  board;
      }
    };

    Board  board  =  (Board)  getJdbcTemplate().queryForObject(sql,
        new  Object[]  {  new  Integer(boardNo)  },  rowMapper);
    board.setBoardNo(boardNo);

    return  board;
  }

  

  

  public  List  findBoardList(int  currentPage,  int  countPerPage)
      throws  DataAccessException  {
    int  start  =  (currentPage  -  1)  *  countPerPage;

    String  sql  =  getMessageSourceAccessor().getMessage(
        "board.sql.select.list");

    RowMapper  rowMapper  =  new  RowMapper()  {
      public  Object  mapRow(ResultSet  rs,  int  rownum)  throws  SQLException  {
        Board  board  =  new  Board();
        board.setBoardNo(rs.getInt("boardNo"));
        board.setTitle(rs.getString("title"));
        board.setName(rs.getString("name"));
        board.setEmail(rs.getString("email"));
        board.setCreateDate(rs.getString("createdate"));
        board.setHitCount(rs.getInt("hitCount"));

        return  board;
      }
    };

    List  list  =  getJdbcTemplate().query(sql,
        new  Object[]  {  new  Integer(start),  new  Integer(countPerPage)  },
        rowMapper);

    return  list;
  }

  

  

  public  int  getTotalNo()  throws  DataAccessException  {
    String  sql  =  getMessageSourceAccessor().getMessage(
        "board.sql.totalcount");
    return  getJdbcTemplate().queryForInt(sql);
  }

  

}

  

  

  

[예제4-7]springJDBCWithTemplateBoardFileDAO.java

public  class  springJDBCWithTemplateBoardFileDAO  extends  MyJdbcDaoSupport
    implements  BoardFileDAO  {

  

  ...  중간  생략  ...

  

  public  int  insert(final  int  boardNo,  final  List  boardFileList)
      throws  DataAccessException  {
    String  sql  =  getMessageSourceAccessor().getMessage(
        "boardfile.sql.insert");

    BatchPreparedStatementSetter  bpsSetter  =  new  BatchPreparedStatementSetter()  {
      public  void  setValues(PreparedStatement  ps,  int  i)
          throws  SQLException  {
        BoardFile  boardFile  =  (BoardFile)  boardFileList.get(i);
        int  boardFileNo  =  getIncrementer().nextIntValue();
        ps.setInt(1,  boardFileNo);
        ps.setInt(2,  boardNo);
        ps.setInt(3,  boardFile.getFileSize());
        ps.setString(4,  boardFile.getFileName());
        ps.setString(5,  boardFile.getContentType());
        ps.setString(6,  boardFile.getTempFileName());
      }

      public  int  getBatchSize()  {
        return  boardFileList.size();
      }
    };

    int  result[]  =  getJdbcTemplate().batchUpdate(sql,  bpsSetter);

    int  insertResult  =  0;
    for  (int  i  =  0;  i  <  result.length;  i++)  {
      insertResult  +=  result[i];
    }
    return  insertResult;
  }

  

  

  public  int  deleteByBoardFileNo(int  boardFileNo)  throws  DataAccessException  {
    String  sql  =  getMessageSourceAccessor().getMessage(
        "boardfile.sql.delete.byboardfileno");

    return  getJdbcTemplate().update(sql,
        new  Object[]  {  new  Integer(boardFileNo)  });
  }

  

  

  public  List  findBoardFileList(int  boardNo)  throws  DataAccessException  {
    String  sql  =  getMessageSourceAccessor().getMessage(
        "boardfile.sql.select.byboardno");

    RowMapper  rowMapper  =  new  RowMapper()  {
      public  Object  mapRow(ResultSet  rs,  int  rownum)  throws  SQLException  {
        BoardFile  boardFile  =  new  BoardFile();
        boardFile.setFileNo(rs.getInt("fileNo"));
        boardFile.setFileSize(rs.getInt("fileSize"));
        boardFile.setFileName(rs.getString("fileName"));

        return  boardFile;
      }
    };

    List  boardFileList  =  getJdbcTemplate().query(sql,
        new  Object[]  {  new  Integer(boardNo)  },  rowMapper);

    return  boardFileList;
  }

  

}

  

JdbcTemplate  클래스는  SQL쿼리의  CRUD를  지원하기  위하여  다양한  메소드를  지원하고  있다.

  

Insert,  Update,  Delete

JdbcTemplate  클래스는  insert,  update,  delete쿼리를  지원하기  위하여  update  메소드를  다음과  같이  지원하고  있다.

int  update(String  sql)

int  update(String  sql,  Object[]  args)

int  update(String  sql,  Object[]  args,  int[]  argtypes)

  

Select

JdbcTemplate  클래스는  select  쿼리를  지원하기  위하여  다음과  같이  지원하고  있다.

int  queryFoInt(String  sql)

int  queryForInt(String  sql,  Object[]  args)

long  queryForLong(String  sql)

long  queryForLong(String  sql,  object[]  args)

Object  queryForObject(String  sql,  Class  requiredType)

Object  queryForObject(String  sql,  Object[]  args,  RowMapper  rowMapper)

List  queryForList(String  sql)

List  queryForList(String  sql,  Object[]  args)

  

JdbcTemplate  클래스는  select쿼리를  실행가히  위하여  지원하고  있는  queryXXX()메소드  외에도  많은  API를  지원하고  있다.  이  책에서  다루지  못한  queryXXX()메소드는  API  문서를  참고하기  바란다.

  

[예제4-6]과[예제4-7]을  보면  Resultset으로  반환되는  데이터를  POJO  또는  POJO  또는  POJO  List로  변환하는  작업을  RowMapper클래스의  mapRow()메소드에서  구현하고  있다.  RowMapper  클래스의  mapRow()  메소드는  JdbcTemplate에서  ResultSet데이터를  POJO로  변환할  때  호출되는  콜백(Callback)메소드이다.  만약  데이터베이스  컬럼의  이름과  도메인  모델  속성의  이름이  같다면  RowMapper클래스를  사용할  필요  없이  queryForObject(String  sql,  Class  requiredType)메소드를  이용하여  자동적으로  데이터  바인딩을  할  수  있다.  데이터베이스  컬럼의  이름과  도메인  모델  속성의  이름이  같지  않을  경우에는  [예제4-6]과  [예제4-7]에서  보는  바와  같이  RowMapper클래스의  mapRow()메소드를  이용하여  수종적으로  데이터  바인딩을  해야  한다.

  
[출처]  spring  JDBC  -  2.구현방법  |작성자  타이거