Java 如何使用<;foreach>;@SelectProvider类中带有MyBatis3的语句

Java 如何使用<;foreach>;@SelectProvider类中带有MyBatis3的语句,java,sql,dynamic,foreach,mybatis,Java,Sql,Dynamic,Foreach,Mybatis,我正在尝试使用@SelectProvider创建动态SQL,方法是将标记foreach用于IN子句中的。我知道如何使用@Select注释到我的映射器中 问题是,当我将SQL转换为SQLProvider时,似乎没有为调用SQLProvider方法以获取SQL的代理处理直接使用它的标记 下面是使用@Select的代码示例: // imports... public interface MyMapper { @Select({"<script>", "SELECT

我正在尝试使用
@SelectProvider
创建动态SQL,方法是将标记
foreach
用于
IN
子句中的
。我知道如何使用
@Select
注释到我的映射器中

问题是,当我将SQL转换为SQLProvider时,似乎没有为调用SQLProvider方法以获取SQL的代理处理直接使用它的标记

下面是使用
@Select
的代码示例:

// imports...

public interface MyMapper {
    @Select({"<script>",
        "SELECT col_1, col_2", 
        "FROM table_1",
        "WHERE col_3 IN",
            "<foreach item='item' index='index' collection='items'",
                "open='(' separator=',' close=')'>",
                "#{item}",
            "</foreach>",
        "</script>"})
    HashMap<String, Object> select(@Param("items") String[] items);
}
当我使用
MyMapper
时,它可以很好地处理SQL,但忽略
脚本
foreach
语句


有谁能提供一个包含代码的具体解决方案吗?

从MyBatis 3.5.1开始,现在可以处理SqlProvider方法中定义的块了。如果升级到此版本,您发布的代码应该可以使用


请参阅发行说明中增强功能下的第一个要点。

从MyBatis 3.5.1开始,现在可以处理SqlProvider方法中定义的块。如果升级到此版本,您发布的代码应该可以使用


请参阅发行说明中增强功能下的第一个要点。

从MyBatis 3.5.1开始,现在可以处理SqlProvider方法中定义的块。如果升级到此版本,您发布的代码应该可以使用


请参阅发行说明中增强功能下的第一个要点。

从MyBatis 3.5.1开始,现在可以处理SqlProvider方法中定义的块。如果升级到此版本,您发布的代码应该可以使用


请参阅发行说明增强部分下的第一个要点。

这是您用来构建动态SQL的Java吗?是的,我正在使用带有MyBatis注释的Java 7来构建映射程序。这是您用来构建动态SQL的Java吗?是的,我正在使用Java 7和MyBatis注释来构建映射程序。您正在使用此Java来构建动态SQL吗?是的,我正在使用Java 7和MyBatis注释来构建映射程序。您正在使用此Java来构建动态SQL吗?是的,我正在使用Java 7和MyBatis注释来构建映射程序。
// imports...

public interface MyMapper {
    @SelectProvider(type = MySQLProvider.class, method = "select")
    HashMap<String, Object> select(@Param("items") String[] items);
}

public class MySQLProvider {
    public String select() {
        SQL sql = new SQL();
        sql.SELECT("col_1");
        sql.SELECT("col_2");
        sql.FROM("table_1");
        sql.WHERE("col_3 IN"
            + "<foreach item='item' index='index' collection='items'"
                + "open='(' separator=',' close=')'>"
                + "#{item}"
            + "</foreach>");
        return "<script>" + sql.toString() + "</script>";
    }
}