2013-05-21 41 views
3

我看到Querydsl的一個例子,但我不明白什麼是QEmployee在是什麼Querydsl「Q」

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

回答

-3

我認爲Q是隻是參數或變量。也許你可以與其他字符改變它,ehmmm或者它是調用函數符號名字Q然後按照可變(Q+namevariable) 像:

QCustomer customer = new QCustomer("c"); // alias for the CUSTOMER table 
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」類。希望這是有幫助的。