MybatisPlus自动注入同时有String字段和list字段


int updateCompany(@Param("companyId") Long companyId, @Param("list") List<Long> companyIdList);
String sql = "UPDATE %s SET COMPANY_ID = %s WHERE COMPANY_ID IN %s";
        StringBuilder valueSql1 = new StringBuilder();
        valueSql1.append("#{companyId}");
        StringBuilder valueSql = new StringBuilder();
        valueSql.append("(");
        valueSql.append("#{list}");
        valueSql.append(")");
        SqlSource sqlSource = languageDriver.createSqlSource(configuration, String.format(sql, tableInfo.getTableName(),
                valueSql1, valueSql), modelClass);
        return this.addUpdateMappedStatement(mapperClass, modelClass, "updateCompany", sqlSource);

打印出来的语句
SET COMPANY_ID = 123456 WHERE COMPANY_ID IN ('[12345, 12346, 12347, 12348]')

怎么处理list集合

   你的问题实际上是如何拼foreach语句。mybatisplus中SqlScriptUtils工具内有拼接foreach部分:SqlScriptUtils.convertForeach。可以看下使用该方法的地方是如何拼写的

public class UpdateWithIn extends AbstractMethod {
    private static final long serialVersionUID = 1L;
    private static String methodName = "updateWithIn";
    private static String methodSql = "<script>\nUPDATE %s SET COMPANY_ID  = %s WHERE COMPANY_ID  in (%s) %s\n</script>";

    @Override
    public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
        final String additional = optlockVersion(tableInfo) + tableInfo.getLogicDeleteSql(true, true);
        String sql = String.format(methodSql, tableInfo.getTableName(), "#{companyId}",
                SqlScriptUtils.convertForeach("#{item}", "list", null, "item", COMMA), additional);
        SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
        return addUpdateMappedStatement(mapperClass, modelClass, methodName, sqlSource);
    }
}