Closed li362692680 closed 2 years ago
扩展根据id批量删除,第一次删除成功,执行第二次还是第一次的参数,没有替换掉,扩展方法如下,帮忙看看是哪里有问题
/** * @return 根据id批量删除 */ public static String deleteBatchIds(ProviderContext providerContext, List<?> idList) { if (idList == null || idList.size() == 0) { throw new NullPointerException( "Parameter cannot be empty" ); } return SqlScript.caching( providerContext, new SqlScript() { @Override public String getSql(EntityTable entity) { return "DELETE FROM " + entity.table() + where( () -> entity.idColumns().stream().map( entityColumn -> entityColumn.column() + " IN (" + idList.stream().map( String::valueOf ).collect( Collectors.joining( "," ) ) + ")" ).collect( Collectors.joining( " AND " ) ) ); } } ); }
通用方法实现中不能使用具体值,你这里不要在方法注入 idList,在接口定义上通过 @Param("idList") 注解配置。
idList
@Param("idList")
在 getSql 方法返回中,通过 foreach 对 idList 进行动态处理。
getSql
foreach 可以参考:
https://github.com/mybatis-mapper/mapper/blob/5d00353958fcdeb44ab6e8ea19352ec49fbf753e/mapper/src/main/java/io/mybatis/mapper/list/ListProvider.java#L44-L49
有类似的现成方法。。用default默认方法实现更简单。
https://github.com/mybatis-mapper/mapper/blob/5d00353958fcdeb44ab6e8ea19352ec49fbf753e/mapper/src/main/java/io/mybatis/mapper/Mapper.java#L109
明白了,多谢!
扩展根据id批量删除,第一次删除成功,执行第二次还是第一次的参数,没有替换掉,扩展方法如下,帮忙看看是哪里有问题