- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 @SelectProvider
通过在 IN
子句中使用标签 foreach
来创建动态 SQL。我知道如何在映射器中使用 @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,但会忽略script
和foreach
语句。
谁能提供一个具体的解决方案,包括代码?
最佳答案
从 MyBatis 3.5.1 开始,<script>
现在可以处理 SqlProvider 方法中定义的 block 。如果您升级到此版本,您发布的代码应该可以工作。
请参阅发行说明增强功能下的第一个要点 here .
关于java - 如何在 MyBatis3 中使用 @SelectProvider 类中的 <foreach> 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29803628/
这是我的第一篇文章,用我糟糕的英语...... 我使用的是MyBatis3.0 在查询中,我使用 SqlBuilder 的方法如下: public class DataStatisticSqlBuil
当我尝试使用 MyBatis 创建动态查询时,成功生成了 sql,但 SQL 占位符中的参数没有被替换。 Mapper @SelectProvider 定义 @SelectProvider(type
我正在尝试使用 @SelectProvider 通过在 IN 子句中使用标签 foreach 来创建动态 SQL。我知道如何在映射器中使用 @Select 注释来使用它。 问题是,当我将 SQL 转换
我是一名优秀的程序员,十分优秀!