簡體   English   中英

如何使用QueryDSL構建GenericDao?

[英]How do I build a GenericDao using QueryDSL?

首先,我是QueryDSL的新手。

我正在使用Spring + Hibernate環境。

我面臨的問題是構建GenericDAO來實現所有基本的CRUD操作,但我不知道如何從QEntity獲取靜態引用。

我的實體類結構如下所示:

    @Entity //jpa
    public class Entity extends AbstractEntity{
    //fields
    ...
    }

    public abstract class AbstractEntity{
    //Logger 
    }

QueryDSL生成的實體的基本結構

    public class QEntity extends PEntity<Entity>{
    ...
    public static final QEntity entity = new QEntity("entity");        
    ...
    //constructors

    } 

GenericDao看起來像這樣:

    public class abstract GenericDao<T extends AbstractEntity, K extends PEntity<? extends AbstractEntity>>{

    //some kind of method to get the K.k (QEntity.entity) reference.        
    //CRUD operations using T and K

    }

一種方法是使用Reflection,但我不是使用該方法的倡導者,尤其是在這種情況下。

另一件我不確定的事情是,是否必須使用QEntity中的靜態引用來構建查詢,或者如果我執行構造函數調用以獲取新對象,則可以。 另外,構造函數參數中的String表示什么?

    public QEntity(String variable) {
    this(Entity.class, forVariable(variable), INITS);
    }

我面臨的問題是構建GenericDAO來實現所有基本的CRUD操作,但我不知道如何從QEntity獲取靜態引用。

如果沒有QEntity類的引用則很難,所以請確保為DAO提供實例。

另一件我不確定的事情是,是否必須使用QEntity中的靜態引用來構建查詢,或者如果我執行構造函數調用以獲取新對象,則可以。 另外,構造函數參數中的String表示什么?

不,這不是強制性的,它是一個方便的例子。 構造函數參數是變量名稱。 如果提供自定義實例,請確保始終使用相同的變量名稱。

還要確保使用最新的Querydsl版本。 PEntity看起來像2.0之前的類。

以下是Querydsl JPA用法的通用DAO超類的示例https://github.com/querydsl/querydsl/blob/master/querydsl-examples/querydsl-example-jpa-guice/src/main/java/com/querydsl /example/jpa/repository/AbstractRepository.java

更新

如果你想避免將Q-type傳遞給你的DAO類,你可以使用這樣的模式https://github.com/spring-projects/spring-data-jpa/blob/master/src/main/java/org /springframework/data/jpa/repository/support/QueryDslRepositorySupport.java#L54

變量名稱將是您實體類的簡單名稱,第一個字母轉換為小寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM