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);
}
}