package com.xzx.gc.batch;
|
|
import org.apache.ibatis.mapping.MappedStatement;
|
import tk.mybatis.mapper.entity.EntityColumn;
|
import tk.mybatis.mapper.mapperhelper.EntityHelper;
|
import tk.mybatis.mapper.mapperhelper.MapperHelper;
|
import tk.mybatis.mapper.mapperhelper.SqlHelper;
|
import tk.mybatis.mapper.provider.ExampleProvider;
|
|
import java.util.Set;
|
|
/**
|
* 批量更新的SqlProvider
|
* @author sunchangtan
|
*/
|
|
public class BatchInsertExampleProvider extends ExampleProvider {
|
|
public BatchInsertExampleProvider(Class<?> mapperClass, MapperHelper mapperHelper) {
|
super(mapperClass, mapperHelper);
|
}
|
|
|
/**
|
* 拼update sql, 使用case when方式,id为主键
|
*
|
* @param ms
|
* @return
|
*/
|
public String insertBatchByPrimaryKeySelective(MappedStatement ms) {
|
final Class<?> entityClass = getEntityClass(ms);
|
//开始拼sql
|
StringBuilder sql = new StringBuilder();
|
sql.append(SqlHelper.insertIntoTable(entityClass, tableName(entityClass), "list[0]"));
|
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) {
|
sql.append(column.getColumnHolder("record") + ",");
|
}
|
sql.append("</trim>");
|
sql.append("</foreach>");
|
|
return sql.toString();
|
}
|
|
|
}
|
|