MyBatisによる「超動的」クエリ
質問
MyBatisでその場でSQLクエリを作成する方法はありますか?Concectize:ITの一部(パラメータ)の一部を実行時に作成する必要があるクエリがあります。
with dummy (id) as (
values (#{rangeEnd}) union all
select id - 1 from dummy where id - 1 >= #{rangeStart}
).......
.
2番目の部分はパラメータとして使用できますが、クエリを試している場合は例外を取得します。
[SQL0584] NULL or parameter marker in VALUES not allowed.
.
プレーンJDBCでMessageFormat
を使用します:
PreparedStatement ps = connection.prepareStatement(
MessageFormat.format(MY_QUERY, currentRange.getRangeEnd()))
.
しかし私はMybatisとの方法をどのようにして見つけていません。
解決
それは本当に簡単です( mybatisを使用した動的選択SQLステートメント):
with dummy (id) as ( values (${rangeEnd}) union all select id - 1 from dummy where id - 1 >= #{rangeStart} )........
他のヒント
@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);
}
. 所属していません StackOverflow