按模式避免QueryDSL Q类型

时间:2014-09-12 22:49:11

标签: java spring jpa design-patterns querydsl

我想实现一个通用的数据访问对象(DAO),目的是在我的 JPA 上全局管理 CRUD 操作 - 基于项目(基于 Java EE 6 )。

我的CrudGenericDAO界面可能如下:

public interface CrudGenericDAO<T, ID extends Serializable> {

    // Returns the number of entities available.
    public long count();

    // Deletes the entity with the given id.
    public void delete(ID id);

    // Deletes the given entities.
    public void delete(Iterable<? extends T> entities);

    // Deletes a given entity.
    public void delete(T entity);

    // Deletes all entities managed by the repository.
    public void deleteAll();

    // Returns whether an entity with the given id exists.
    public boolean exists(ID id);

    // Returns all instances of the type.
    public Iterable<T> findAll();

    // Returns all instances of the type with the given IDs.
    public Iterable<T> findAll(Iterable<ID> ids);

    // Retrieves an entity by its id.
    public T findOne(ID id);

    // Saves all given entities.
    <S extends T>Iterable<S> save(Iterable<S> entities);

    // Saves a given entity.
    <S extends T> save(S entity);

}

现在,我正在寻找一种可靠的方法来使用 QueryDSL 来实现我的Generic DAO: 主要思想是避免继承CrudGenericDAO实现的类的 Q-Types

请随意向我建议,在您看来,哪种设计模式最适合实现所描述的目标。


注意:

Spring Framework 提供了这种解决方案,但是:

  • 我不能将它用于我的项目;

  • Spring的实现虽然完整但很广泛,因此理解起来非常重要:我正在寻找更简单的东西。

1 个答案:

答案 0 :(得分:0)

使用PathBuilder:http://www.querydsl.com/static/querydsl/3.2.0/apidocs/com/mysema/query/types/path/PathBuilder.html

JavaDoc中的用法示例:

PathBuilder<User> user = new PathBuilder<User>(User.class, "user");
Predicate filter = user.getString("firstName").eq("Bob");
List<User> users = query.from(user).where(filter).list(user);