2012-10-18 5 views
0

처음부터이 패턴을 구현해야했던 지 오래되었으므로이 패턴을 spring jdbc와 함께 사용하는 것에 대해 약간 혼란 스럽다. 여기 내 BaseDao에서 미리보기입니다 : 당신은 내가 가진 볼 수 있듯이일반 DAO 패턴 Spring JDBC 템플릿

protected BaseDao(RowMapper<T> rowMapper, String tableName, JdbcTemplate jdbcTemplate) 
    { 
     this.rowMapper = rowMapper; 
     this.tableName = tableName; 
     this.findByIdSql = "SELECT * FROM " + tableName + " WHERE id = ?"; 
     this.jdbcTemplate = jdbcTemplate; 
    } 

    public T findById(final Integer id) 
    { 
     if (id == null) 
     { 
     return null; 
     } 

     Object[] params = { id }; 
     return jdbcTemplate.queryForObject(findByIdSql, params, rowMapper); 
    } 

    public T save(final T dto) 
    { 
     if (dto == null) 
     { 
     return null; 
     } 

     try 
     { 
     if (dto.isNew()) 
     { 
      final Integer newId = jdbcTemplate.update("INSERT INTO " + tableName); 
     } 
     } 
     catch (UncategorizedSQLException e) 
     { 
     logger.error("****************" + e.getMessage(), e); 
     throw new RuntimeException("Could not persist: " + e.getMessage()); 
     } 
    } 

    public void delete(final T dto) 
    { 
     if (dto == null) 
     { 
     final String errorMessage = "Can't delete a null object"; 
     logger.warn(errorMessage); 
     throw new RuntimeException(errorMessage); 
     } 

     if (!dto.cameFromDatabase()) 
     { 
     throw new RuntimeException("Can't delete an object that didn't come from the database"); 
     } 

     try 
     { 

     } 
     catch (JdbcUpdateAffectedIncorrectNumberOfRowsException e) 
     { 
     final String message = "The delete failed on " + dto + ". " + e.getMessage(); 
     logger.error(message); 
     throw new RuntimeException(message, e); 

     } 
    } 

내 findById 메소드 노력하고 그것을 던져 모든 클래스를 처리 할 수. 문제는 저장을 "생성"(삽입 및 업데이트 처리)하고 jdbctemplate를 사용하여 간단히 삭제하는 방법을 기억하지 못합니다. 이것이 성취 될 수 없습니까? 모든 DAO는이 두 가지 방법 자체를 정의해야합니까? jdbc 템플릿이 별도의 insert, update, delete 문을 작성하는 방법에 익숙하지 않은 것을 보았습니다. 웹 브라우징 나는 최대 절전 모드 나 엔터티 매니저를 사용하여 많은 예제를 볼 수있다. 내가 취해야 할 길인가요? 또는 내가 여기에서 놓치고있는 명백하게 명백한 단계는 무엇입니까?

는 내가 저장하고 작성되지 않은 삭제 알고 있지만 난 그냥 던져 모든 DTO를 처리 할 수있는 라인

final Integer newId = jdbcTemplate.update("INSERT INTO " + tableName); 

을 처리하는 방법을 궁금하네요.

감사합니다. 당신은 좋은 경로에

답변

0

, JdbcTemplate 방법은 updatecan handle insert/delete/update operations

삽입 작업 시연 this article 인용 예 : 답장을

private DataSource dataSource; 
private JdbcTemplate jdbcTemplate; 

public void setDataSource(DataSource dataSource) { 
    this.dataSource = dataSource; 
} 

public void insert(Customer customer){ 

    String sql = "INSERT INTO CUSTOMER " + 
     "(CUST_ID, NAME, AGE) VALUES (?, ?, ?)"; 

    jdbcTemplate = new JdbcTemplate(dataSource); 

    jdbcTemplate.update(sql, new Object[] { customer.getCustId(), 
     customer.getName(),customer.getAge() 
    }); 

} 
+1

덕분에, 나는 특정 DTO에 대한 삽입을 수행하는 방법을 알고 . 하지만 그 삽입을 일반화하여 DTO를 취할 수있는 방법을 찾으려고합니다. jdbctemplate만으로 가능합니까? 나는 enityManger가 그것을, 최대 절전 모드, JPA를 ...하는 등 보았다. 감사합니다. – sauce

+1

jdbcTemplate 또는 ORM 중 어떤 데이터가 어떤 열로 전달되는지 해결할 수 없습니다. 결코 자동으로 발생하지 않습니다. 당신이 언급 한 것처럼 ORM 프레임 워크를 사용한다고해도, DTO의 어떤 필드가 어떤 테이블 열에 매핑되는지를 지정해야합니다. 이것은 기본적으로 ORM 엔티티를 사용하는 위의 예제에서 jdbctemplate로 볼 수있는 매핑을 추상화하는 추가 레이어를 소개합니다. – dimitrisli

+1

감사합니다. 내 질문에 답했습니다. – sauce