Frage

Gibt es eine Möglichkeit, mit MyBatis eine SQL-Abfrage im Handumdrehen zu erstellen?Zur Konkretisierung:Ich habe eine Abfrage, bei der ein Teil davon (aber kein Parameter) zur Laufzeit erstellt werden muss:

         with dummy (id) as (
           values (#{rangeEnd}) union all
           select id - 1 from dummy where id - 1 >= #{rangeStart}   
         ).......

Der zweite Teil kann als Parameter verwendet werden, aber wenn ich die Abfrage so wie sie ist ausprobiere, erhalte ich eine Ausnahme:

[SQL0584] NULL or parameter marker in VALUES not allowed.

Mit einfachem JDBC verwende ich MessageFormat:

PreparedStatement ps = connection.prepareStatement(
            MessageFormat.format(MY_QUERY, currentRange.getRangeEnd()))

, aber ich habe keine Möglichkeit gefunden, das mit MyBatis zu machen.

War es hilfreich?

Lösung

Es ist wirklich einfach (Antwort von Dynamische SQL-Anweisungen mit MyBatis auswählen):

with dummy (id) as (
           values (${rangeEnd}) union all
           select id - 1 from dummy where id - 1 >= #{rangeStart}   
         ).......

Andere Tipps

Verwenden @SelectProvider Anmerkung:

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top