protected interface Callback<E> {
E doInCallback(Connection conn, PreparedStatement pstm, ResultSet rs)
throws Throwable;
}
protected <E> E template(Callback<E> callback) throws DataAccessException {
// 2.第一步执行
PreparedStatement pstm = null;
ResultSet rs = null;
try {
// 3.进入回调方法入口
return callback.doInCallback(conn, pstm, rs); // 6.退出执行并取得返回值
} catch (Throwable e) {
throw new Exception(e);
} finally {
// 5.返回释放资源
ConnectionFactory.Close(pstm, rs);
}
}
//调用方法
//执行顺序: 1.执行前
Boolean result= template(new Callback<Boolean>() {
@Override
public Boolean doInCallback(Connection conn,
PreparedStatement pstm, ResultSet rs) throws Throwable {
// 4.执行回调方法
pstm = conn.prepareStatement(sql);
pstm.setObject(1, id);
int row = pstm.executeUpdate();
return row != 0 ? true : false;
}
});
// 7. 从第6步取得返回值赋值给 result