質問

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);
}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top