从一开始就必须实现这个模式已经有一段时间了,所以我对在 spring jdbc 中使用这个模式时缺少什么感到有点困惑。这是我的 BaseDao 的一个片段:
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 模板如何灵活地编写单独的插入、更新、删除语句。浏览网页时,我看到了大量使用休眠或实体管理器的示例。这是我应该走的路线吗?或者我在这里遗漏的明显步骤是什么?
我知道保存和删除没有填写,但我只是想知道如何处理该行
final Integer newId = jdbcTemplate.update("INSERT INTO " + tableName);
处理扔给它的任何 DTO。
非常感谢你!