3

我看到了一个 Querydsl 示例,但我不明白 QEmployee 是什么

QEmployee employee = QEmployee.employee;
QEmployee e = new QEmployee("e");
query.from(employee)
    .where(employee.weeklyhours.gt(
        new HibernateSubQuery().from(employee.department.employees, e)
       .where(e.manager.eq(employee.manager))
       .unique(e.weeklyhours.avg())
)).list(employee)

有人请解释一下' Q '

4

3 回答 3

8

“Q”类是根据您的实体自动生成的查询类型,用于在 Querydsl 中进行查询。

请参见此处(第 2.1.5 节):http ://www.querydsl.com/static/querydsl/latest/reference/html/ch02.html#d0e184

于 2013-05-21T04:48:28.373 回答
4

我看到已经有了答案,但认为我们应该扩展。Querydsl 自动生成代表您的数据库对象的类。如果你有MyTable这样的表,对应的Querydsl对象会默认获取前缀“Q”(QMyTable)。要从该表中查询,您只需实例化 QMyTable 对象的一个​​实例,然后使用 querydsl 对该表进行操作(例如 mysqlquery.from(qmytableinstance).list(myfield) )。

Q 只是生成的 Querydsl 对象的默认名称前缀。在 Querydsl 对象生成期间,您可以使用 setNamePrefix() 方法告诉它使用您想要的任何命名前缀。以下是 JUnit 测试中使用“NOTQ”而不是“Q”的示例:

@Test
public void testQueryDslGenerateCode_example() {
    Connection connection = this.getConnection();
    MetaDataExporter ex = new MetaDataExporter();
    ex.setPackageName(packageName);
    ex.setTargetFolder(new File(targetFolder));
    ex.setSchemaToPackage(true);
    ex.setSchemaPattern(schemaName);
    ex.setNamePrefix("NOTQ");
    try {
        ex.export(connection.getMetaData());
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

这个 JUnit 测试将生成所有前缀为“NOTQ”而不是“Q”的类。希望这会有所帮助。

于 2013-10-14T18:49:43.200 回答
-3

我认为 Q 只是参数或变量。也许你可以用其他字符、ehmmm 或它的符号来改变它,它是调用函数的名称,Q然后跟随变量(Q+namevariable) ,如:

QCustomer customer = new QCustomer("c"); // alias for the CUSTOMER table
于 2013-05-21T04:27:25.307 回答