Reputation: 23
Plz help me inject tag into @Delete query.
@Delete({"<script>","${__sql}","</script>"})
public int Delete(String __sql, List<Map<String, Object>> list);
__sql :
DELETE FROM MYTABLE WHERE KEY IN (<foreach collection='list' item='item' seperator=','> #{item.key} </foreach>)
I got error below:
Caused by: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'item' not found. Available parameters are [__sql, list, param1, param2]
Upvotes: 0
Views: 590
Reputation: 3594
Tags in ${}
are not evaluated.
You need to use SQL provider with @Lang
instead.
public interface YourMapper {
@Lang(XMLLanguageDriver.class)
@DeleteProvider(type = YourSqlProvider.class, method = "deleteSql")
int Delete(String sql, List<Map<String, Object>> list);
class YourSqlProvider {
public String deleteSql(String sql) {
return "<script>" + sql + "</script>";
}
}
}
This requires MyBatis 3.5.1 or newer, IIRC.
Upvotes: 2