
tk.mybatis.mapper.additional.upsert.BatchUpsertProvider Maven / Gradle / Ivy
The newest version!
package tk.mybatis.mapper.additional.upsert;
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.MapperTemplate;
import tk.mybatis.mapper.mapperhelper.SqlHelper;
import java.util.Set;
public class BatchUpsertProvider extends MapperTemplate {
public BatchUpsertProvider(Class> mapperClass, MapperHelper mapperHelper) {
super(mapperClass, mapperHelper);
}
public String batchUpsert(MappedStatement ms) {
final Class> entityClass = getEntityClass(ms);
StringBuilder sql = new StringBuilder();
sql.append("");
sql.append("INSERT INTO ");
sql.append(tableName(entityClass));
Set columns = EntityHelper.getColumns(entityClass);
String primaryKeyColumn = null;
EntityColumn logicDeleteColumn = SqlHelper.getLogicDeleteColumn(entityClass);
sql.append("");
for (EntityColumn column : columns) {
if (column.isId()) {
primaryKeyColumn = column.getColumn();
}
if (column.isInsertable()) {
sql.append(column.getColumn() + ",");
}
}
sql.append(" ");
sql.append(" VALUES ");
sql.append("");
for (EntityColumn column : columns) {
if (column.getGenIdClass() != null) {
sql.append(" ");
}
}
for (EntityColumn column : columns) {
if (!column.isInsertable()) {
continue;
}
if (logicDeleteColumn != null && logicDeleteColumn == column) {
sql.append(SqlHelper.getLogicDeletedValue(column, false)).append(",");
continue;
}
sql.append(column.getColumnHolder("record") + ",");
}
sql.append(" ");
sql.append(" ON CONFLICT (" + primaryKeyColumn + ") DO UPDATE ");
sql.append(SqlHelper.updateSetColumns(entityClass, "record", true, isNotEmpty()));
sql.append(" ");
return sql.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy