模板方法模式:Spring 中的 JdbcTemplate 类使用了模板方法模式,定义了一个通用的数据库操作模板,将不同的数据库操作实现交给子类来完成。
public abstract class JdbcTemplate {
public <T> List<T> query(String sql, RowMapper<T> rowMapper) {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
List<T> result = null;
try {
conn = getConnection();
stmt = conn.prepareStatement(sql);
setParameters(stmt);
rs = stmt.executeQuery();
result = new ArrayList<T>();
while (rs.next()) {
result.add(rowMapper.mapRow(rs));
}
} catch (Exception e) {
handleException(e);
} finally {
closeResultSet(rs);
closeStatement(stmt);
closeConnection(conn);
}
return result;
}
protected abstract Connection getConnection() throws SQLException;
protected abstract void setParameters(PreparedStatement stmt) throws SQLException;
protected abstract void handleException(Exception e);
protected void closeResultSet(ResultSet rs) { /* ... */ }
protected void closeStatement(Statement stmt) { /* ... */ }
protected void closeConnection(Connection conn) { /* ... */ }
}
在上述代码中,JdbcTemplate 类是一个抽象类,定义了一个通用的数据库操作模板,其中 query 方法就是一个模板方法,使用了钩子方法(如 getConnection、setParameters、handleException 等)来完成不同的数据库操作,具体的数据库操作实现交给子类来完成。这种设计可以让代码更加简洁,同时也更加易于维护和扩展。