簡體   English   中英

如何使用 <foreach> MyBatis3在@SelectProvider類中的語句

[英]How to use <foreach> statement in @SelectProvider class with MyBatis3

我試圖用@SelectProvider通過包括使用標簽來創建動態SQL foreachIN子句。 我知道如何在映射器中使用@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);
}

上面的代碼實際上有效,但是當我嘗試使用@SelectProvider它無效。

這是我使用@SelectProvider時的代碼:

// 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>";
    }
}

當我使用MyMapper它可以很好地處理SQL,但忽略scriptforeach語句。

誰能提供包含代碼的具體解決方案?

從MyBatis 3.5.1開始,現在可以處理SqlProvider方法中定義的<script>塊。 如果您升級到此版本,則發布的代碼應該可以使用。

請在此處查看發行說明中增強功能下的第一個要點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM