有没有办法使用MyBatis动态创建SQL查询?要具体化:我有一个查询,其中部分内容(但不是参数)需要在运行时创建:
with dummy (id) as (
values (#{rangeEnd}) union all
select id - 1 from dummy where id - 1 >= #{rangeStart}
).......
第二部分可以用作参数,但是,当我尝试查询时,我得到一个例外:
[SQL0584] NULL or parameter marker in VALUES not allowed.
使用普通JDBC我使用MessageFormat
:
PreparedStatement ps = connection.prepareStatement(
MessageFormat.format(MY_QUERY, currentRange.getRangeEnd()))
,但我还没有找到一种方法如何使用MyBatis。
答案 0 :(得分:0)
这很简单(来自Dynamic Select SQL statements with MyBatis的答案):
with dummy (id) as ( values (${rangeEnd}) union all select id - 1 from dummy where id - 1 >= #{rangeStart} ).......
答案 1 :(得分:0)
使用@SelectProvider
注释:
public interface SqlMapper {
static class PureSqlProvider {
public String sql(String sql) {
// Create your query here
return sql;
}
}
@SelectProvider(type = PureSqlProvider.class, method = "sql")
public List<Dummy> select(String sql);
}