Pregunta

¿Hay manera de crear una consulta de SQL sobre la mosca con MyBatis?Para concretar: Tengo una consulta, donde se debe crear parte de él (pero no parámetro) en el tiempo de ejecución:

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

La segunda parte se puede utilizar como parámetro, pero, al intentar la consulta, ya que es una excepción:

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

con plano JDBC I Uso MessageFormat:

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

, pero no he encontrado una manera de hacerlo con MyBatis.

¿Fue útil?

Solución

Es realmente fácil (respuesta de Dinámico Seleccionar sentencias SQL con MyBatis ):

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

Otros consejos

Utilice la anotación de @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);
}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top