Вопрос

Есть ли способ создать sql-запрос "на лету" с помощью MyBatis?Конкретизировать:У меня есть запрос, где его часть (но не параметр) должна быть создана во время выполнения:

         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.

Это было полезно?

Решение

Это действительно легко (ответ от Dynamic Выберите SQL-заявления с MyBatis ):

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