首先模仿接口insertList接口:
/** * Created by kun.zuo * Created by time 2020/12/29 * Vsrsion 1.0 */ public class SpecialBatchProvider extends MapperTemplate { public SpecialBatchProvider(Class mapperClass, MapperHelper mapperHelper) { super(mapperClass, mapperHelper); } public String batchInseetList(MappedStatement ms) { Class entityClass = getEntityClass(ms); //開始拼sql StringBuilder sql = new StringBuilder(); sql.append(SqlHelper.insertIntoTable(entityClass, tableName(entityClass))); sql.append(SqlHelper.insertColumns(entityClass, false, false, false)); sql.append(" VALUES "); sql.append("<foreach collection=\"list\" item=\"record\" separator=\",\" >"); sql.append("<trim prefix=\"(\" suffix=\")\" suffixOverrides=\",\">"); //獲取全部列 Set<EntityColumn> columnList = EntityHelper.getColumns(entityClass); //當某個列有主鍵策略時,不需要考慮他的屬性是否為空,因為如果為空,一定會根據主鍵策略給他生成一個值 for (EntityColumn column : columnList) { if (column.isInsertable()) { //出現類型com.microsoft.sqlserver.jdbc.SQLServerException: 操作數類型沖突: varbinary 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("</foreach>"); return sql.toString(); } }
/** * Created by kun.zuo * Created by time 2020/12/29 * Vsrsion 1.0 */ @RegisterMapper public interface SpecialBatchMapper<T> { /** * 批量插入數據庫,所有字段都插入,包括主鍵 * * @return */ @Options(useGeneratedKeys = true, keyProperty = "id") @InsertProvider(type = SpecialBatchProvider.class, method = "batchInseetList") int batchInseetList(List<T> recordList); }