使用回调机制+模板模式可以实现业务代码和数据库操作代码的分离
公共回调方法
@Override
public Integer executeSQL(String sql, Object... params) throws DataAccessException {
return execute(session -> executeObject(session, nsql));
}
// template 是一个接口,可以通过不同的类继承,重写不同的execute方法,实现调用不同的框架,比如hibernate,原生jdbcTemplate等,
@Autowired
protected SqlTemplateBase template;
public <K> K execute(SqlCallback<K> action) throws DataAccessException {
return template.execute(action);
}
这个是调用的hibernate的回调方法
@Override
public <T> T execute(NpSqlCallback<T> action) throws DataAccessException {
return getHibernateTemplate().executeWithNativeSession(session -> execute(session, action));
}