How to get fully materialized query from querydsl

前端 未结 2 1368
迷失自我
迷失自我 2020-12-08 16:47

I am trying to use querydsl for building dynamic queries for dynamic schemas. I am trying to get just the query instead of having to actually execute it.

So far I ha

2条回答
  •  囚心锁ツ
    2020-12-08 17:09

    To enable schema printing use the following pattern

    SQLTemplates templates = MySQLTemplates.builder()
        .printSchema()
        .build();
    

    SQLTemplates subclasses were used before, but since some time the builder pattern is the official way to customize the templates http://www.querydsl.com/static/querydsl/3.3.1/reference/html/ch02s03.html#d0e904

    And to enable direct serialization of literals use

    //configuration level
    configuration.setUseLiterals(true);
    
    //query level
    configuration.setUseLiterals(true);
    

    Here is a full example

    // configuration
    SQLTemplates templates = MySQLTemplates.builder()
        .printSchema()
        .build();
    Configuration configuration = new Configuration(templates);
    
    // querying
    SQLQuery sqlQuery = new SQLQuery(connection, configuration)
        .from(userPath).where(idPath.eq(1l)).limit(10);
    sqlQuery.setUseLiterals(true);    
    String query = sqlQuery.getSQL(usernamePath).getSQL();
    

    If you always just want the SQL query string out, move setUseLiterals from query to configuration.

    Concerning the usage of Querydsl expressions the usage of code generation like documented here is advised http://www.querydsl.com/static/querydsl/3.3.1/reference/html/ch02s03.html

    It will make your code typesafe, compact and readable.

    If you want to try Querydsl without code generation you can replace

    Path userPath = new PathImpl(Object.class, variable);
    
    
    

    with

    Path userPath = new RelationalPathBase(Object.class, variable, schema, table);
    
        

    提交回复
    热议问题