如何使用QueryDSL构建GenericDao?

 糖糖菓子 发布于 2023-01-31 16:32

首先,我是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{
    ...
    public static final QEntity entity = new QEntity("entity");        
    ...
    //constructors

    } 

GenericDao看起来像这样:

    public class abstract GenericDao>{

    //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);
    }

Timo Westkäm.. 8

我面临的问题是构建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

变量名称将是您实体类的简单名称,第一个字母转换为小写.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有