All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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