mybatis/mybatis-dynamic-sql

SqlBuilder.InsertIntoNextStep does not support building

Closed this issue · 1 comments

This is how I currently implement dynamic insertion
`

public static GeneralInsertStatementProvider buildInsert(FormDynamicInsert formDynamicInsert) {
        SqlTable sqlTable = SqlTable.of(formDynamicInsert.getTableName());
        SqlBuilder.InsertIntoNextStep insertIntoNextStep = SqlBuilder.insertInto(sqlTable);
        for(int i=0;i<formDynamicInsert.getFields().size()-2; i++) {
            FormDynamicInsert.InsertField insertField = formDynamicInsert.getFields().get(i);
            insertIntoNextStep.set(sqlTable.column(insertField.getField())).toValue(insertField.getValue());
        }
        FormDynamicInsert.InsertField lastInsertField = formDynamicInsert.getFields().get(formDynamicInsert.getFields().size()-1);
        return insertIntoNextStep.set(sqlTable.column(lastInsertField.getField())).toValue(lastInsertField.getValue())
                .build().render(RenderingStrategies.MYBATIS3);
    }

`
But I want to achieve it this way

Image
Is there a problem with my implementation method?

You can do it by directly using the GeneralInsertDSL.

public static GeneralInsertStatementProvider buildInsert(FormDynamicInsert formDynamicInsert) {
    SqlTable sqlTable = SqlTable.of(formDynamicInsert.getTableName());
    GeneralInsertDSL dsl = GeneralInsertDSL.insertInto(sqlTable);
    formDynamicInsert.getFields().forEach(f -> {
        dsl.set(f.getField()).toValue(f.getValue());
    });
    return dsl.build.render(RenderingStrategies.MYBATIS3);
}