sqlPojosMapping.put(sql, objsList);
}
}
} catch (IllegalArgumentException e) {
logger.error("init insert sql error! exec number : {}", r, e);
throw new DataAccessException("init insert sql error!", e);
} catch (IllegalAccessException e) {
logger.error("init insert sql error! exec number : {}", r, e);
throw new DataAccessException("init insert sql error!", e);
} catch (NoSuchFieldException e) {
logger.error("init insert sql error! exec number : {}", r, e);
throw new DataAccessException("init insert sql error!", e);
} catch (SecurityException e) {
logger.error("init insert sql error! exec number : {}", r, e);
throw new DataAccessException("init insert sql error!", e);
}
// 这里使用同一个Connection以保证主键获取的成功
Connection conn;
try {
conn = getConnection();
} catch (SQLException e) {
logger.error("Get connection from datasource error", e);
throw new DataAccessException("Get connection from datasource error!", e);
}
try {
for (String sql : sqlAndArgsList.keySet()) {
int[] ii = batchUpdate(conn, sql, sqlAndArgsList.get(sql));
SelectKey selectKey = SqlRepairer.getSelectKey(dbType);
if (selectKey != null) {
List<Object> objs = sqlPojosMapping.get(sql);
if (objs != null && !objs.isEmpty()) {
// 自增主键配置
IdentityFinder identityFinder = new IdentityFinder(conn, selectKey);
try {
identityFinder.find(objs.toArray());
} catch (IllegalArgumentException e) {
logger.error("find identity!", e);
throw new DataAccessException("find identity error!", e);
} catch (IllegalAccessException e) {
logger.error("find identity!", e);
throw new DataAccessException("find identity error!", e);
} catch (SQLException e) {
logger.error("find identity!", e);
throw new DataAccessException("find identity error!", e);
}
}
}
for (int i : ii) {
r += i;
}
}
} finally {
try {
close(conn);
} catch (SQLException e) {
throw new DataAccessException("close connection error!", e);
}
}
return r;
}