@InsertProvider(type = InsertOrUpdateListProvider.class, method = "dynamicSQL")
int insertList(@Param("list")List<? extends T> list,@Param("seq") String seq);
public String insertList(MappedStatement ms) {
Class entityClass = getEntityClass(ms);
StringBuilder sql = new StringBuilder();
sql.append(SqlHelper.insertIntoTable(entityClass, tableName(entityClass)));
sql.append(SqlHelper.insertColumns(entityClass, true, false, false));
String sqlStr = sql.toString();
sqlStr = sqlStr.replace("(", "(id,");
sql = new StringBuilder();
sql.append(sqlStr);
sql.append(" select ${seq}, T.* from ( ");
sql.append("<foreach collection=\"list\" item=\"record\" index=\"index\" separator=\"union all\" >");
sql.append("select ");
sql.append("<trim suffixOverrides=\",\">");
Set<EntityColumn> columnList = EntityHelper.getColumns(entityClass);
for (EntityColumn column : columnList) {
if (column.isInsertable()) {
if (!"ID".equals(column.getColumn()) && !column.isId()) {
if (column.getJavaType() == Double.class) {
String record = column.getColumnHolder("record");
record = record.substring(0, record.length() - 1) + ",jdbcType=DECIMAL" + "}";
sql.append(record + ",");
} else {
sql.append(column.getColumnHolder("record") + ",");
}
}
}
}
sql.append("</trim>");
sql.append(" from dual");
sql.append("</foreach>");
sql.append(" ) T");
return sql.toString();
}
