我想实现一个通用的数据访问对象(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的实现虽然完整但很广泛,因此理解起来非常重要:我正在寻找更简单的东西。
答案 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);