在利用mybatis 的sqlsession,批处理方式打开session,例如
public <T> void batchdelete(Collection<T> dataList, final SingleProcessor<T> processor) {
final SqlSession session = getGenericSqlSessionFactory().openSession(ExecutorType.BATCH);
int i = 0;
for (T data : dataList) {
processor.process(session, data);
if (++i == DEFAULT_COMMIT_COUNT) {
i = 0;
session.commit();
}
}
if (i != 0) {
session.commit();
}
session.close();
}
注意关闭session,若不关闭会很快把数据库链接耗完,导致所有DB操作异常。
存在另一种情况,外层有@Transaction事务管理,此时事务提交后spring也会把connection关闭。
DataSourceUtils:
public static void releaseConnection(Connection con, DataSource dataSource) {
try {
doReleaseConnection(con, dataSource);
}
catch (SQLException ex) {
logger.debug("Could not close JDBC Connection", ex);
}
catch (Throwable ex) {
logger.debug("Unexpected exception on closing JDBC Connection", ex);
}
}