Question

Existe-t-il un moyen de créer une requête SQL à la volée avec MyBatis ?Pour concrétiser :J'ai une requête dont une partie (mais pas le paramètre) doit être créée au moment de l'exécution :

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

La deuxième partie peut être utilisée comme paramètre, mais lorsque j'essaie la requête telle quelle, j'obtiens une exception :

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

Avec JDBC simple, j'utilise MessageFormat:

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

, mais je n'ai pas trouvé de moyen de le faire avec MyBatis.

Était-ce utile?

La solution

C'est vraiment simple (réponse de Instructions SQL de sélection dynamique avec MyBatis):

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

Autres conseils

Utiliser @SelectProvider annotation:

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);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top