처음부터이 패턴을 구현해야했던 지 오래되었으므로이 패턴을 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);
을 처리하는 방법을 궁금하네요.
감사합니다. 당신은 좋은 경로에
덕분에, 나는 특정 DTO에 대한 삽입을 수행하는 방법을 알고 . 하지만 그 삽입을 일반화하여 DTO를 취할 수있는 방법을 찾으려고합니다. jdbctemplate만으로 가능합니까? 나는 enityManger가 그것을, 최대 절전 모드, JPA를 ...하는 등 보았다. 감사합니다. – sauce
jdbcTemplate 또는 ORM 중 어떤 데이터가 어떤 열로 전달되는지 해결할 수 없습니다. 결코 자동으로 발생하지 않습니다. 당신이 언급 한 것처럼 ORM 프레임 워크를 사용한다고해도, DTO의 어떤 필드가 어떤 테이블 열에 매핑되는지를 지정해야합니다. 이것은 기본적으로 ORM 엔티티를 사용하는 위의 예제에서 jdbctemplate로 볼 수있는 매핑을 추상화하는 추가 레이어를 소개합니다. – dimitrisli
감사합니다. 내 질문에 답했습니다. – sauce