我看到了一个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 '
答案 0 :(得分:8)
“Q”类是基于您的实体自动生成的查询类型,用于在Querydsl中查询。
见这里(第2.1.5节):http://www.querydsl.com/static/querydsl/latest/reference/html/ch02.html#d0e184
答案 1 :(得分:4)
我看到已有答案,但我们认为应该扩大。 Querydsl自动生成表示数据库对象的类。如果你有一个像MyTable这样的表,相应的Querydsl对象默认会得到前缀“Q”(QMyTable)。要从该表进行查询,您只需要实例化QMyTable对象的实例,然后使用querydsl对该表进行操作(例如,mysqlquery.from(qmytableinstance).list(myfield))。
Q只是生成的Querydsl对象的默认名称前缀。在Querydsl对象生成期间,您可以使用setNamePrefix()方法告诉它使用您想要的任何命名前缀。以下是使用“NOTQ”而不是“Q”的JUnit测试中的示例:
@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”为前缀的类。希望这有用。
答案 2 :(得分:-3)
我认为Q只是参数或变量。也许您可以使用其他char,ehmmm或它的呼叫函数符号来更改它,名称为Q
,然后跟随变量(Q+namevariable)
喜欢:
QCustomer customer = new QCustomer("c"); // alias for the CUSTOMER table