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 BatchExampleProvider extends ExampleProvider {
public BatchExampleProvider(Class> mapperClass, MapperHelper mapperHelper) {
super(mapperClass, mapperHelper);
}
/**
* 拼update sql, 使用case when方式,id为主键
*
* @param ms
* @return
*/
public String updateBatchByPrimaryKeySelective(MappedStatement ms) {
final Class> entityClass = getEntityClass(ms);
//开始拼sql
StringBuilder sql = new StringBuilder();
sql.append(SqlHelper.updateTable(entityClass, tableName(entityClass)));
sql.append("");
//获取全部列
Set columnList = EntityHelper.getColumns(entityClass);
String columnNameInDb = "id";
String fieldNameInWeb = "id";
for (EntityColumn column : columnList) {
if(column.isId()){
columnNameInDb=column.getColumn();
fieldNameInWeb=column.getProperty();
}
if (!column.isId() && column.isUpdatable()) {
sql.append(" ");
sql.append(" ");
sql.append(" ");
sql.append(" when "+columnNameInDb+"=#{i."+fieldNameInWeb+"} then #{i."+column.getEntityField().getName()+"}");
sql.append(" ");
sql.append(" ");
sql.append(" ");
}
}
sql.append("");
sql.append("WHERE");
sql.append(" "+columnNameInDb+" IN ");
sql.append("");
sql.append("");
sql.append("#{i."+fieldNameInWeb+"}");
sql.append("");
sql.append("");
return sql.toString();
}
}