Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java和Hibernate的Dao模式_Java_Design Patterns - Fatal编程技术网

Java和Hibernate的Dao模式

Java和Hibernate的Dao模式,java,design-patterns,Java,Design Patterns,我正在尝试为我的应用程序创建一个好的模式。我希望尽可能减少重复代码,并且尽可能多地使用泛型。我已经为此创建了一个模式,但我想知道代码是否有任何错误,或者是否有其他更好的模式已经为此创建 BaseDao接口: public interface BaseDao<T extends DTO> { List<T> fetchAll(); } UserDao实现: public class UserDaoImpl extends BaseDaoImpl<User

我正在尝试为我的应用程序创建一个好的模式。我希望尽可能减少重复代码,并且尽可能多地使用泛型。我已经为此创建了一个模式,但我想知道代码是否有任何错误,或者是否有其他更好的模式已经为此创建

BaseDao接口:

public interface BaseDao<T extends DTO> {

    List<T> fetchAll();

}
UserDao实现:

public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao{

    public UserDaoImpl() {
    this(User.class);
    }
    private UserDaoImpl(Class<User> clazz) {
    super(clazz);
    }

    public User getUserByUsername(String name) {

    User user = null;
    try (Session session = HibernateUtils.getSessionFactory().openSession()) {
        String hql = "FROM User u WHERE u.username = :name";
        Query<User> query = session.createQuery(hql).setMaxResults(1);
        query.setParameter("name", name);
        user = query.uniqueResult();
    }
    return user;
    }
}
公共类UserDaoImpl扩展BaseDaoImpl实现UserDao{
公共UserDaoImpl(){
这个(User.class);
}
私有UserDaoImpl(类clazz){
超级(clazz);
}
公共用户getUserByUsername(字符串名称){
User=null;
尝试(会话会话=HibernateUtils.getSessionFactory().openSession()){
字符串hql=“来自用户u,其中u.username=:name”;
Query Query=session.createQuery(hql).setMaxResults(1);
query.setParameter(“name”,name);
user=query.uniqueResult();
}
返回用户;
}
}
PS:所以,我想在BaseDaoImpl中创建所有基本操作(添加、保存、更新、getAll等),然后创建所有要继承该类的DAO类


你认为这种方法会给我带来后面的问题吗?

只是一个小提示:“我希望尽可能多地使用泛型”应该是“我希望尽可能合理地使用泛型”。另一个提示:这个问题更倾向于赞成或反对。是的,尽可能合理。我只是想避免在我的所有类中编写更新、删除、获取等代码。您看过Grails中的GORM吗?如果我有自由选择基于Java的平台,我会选择它。(Google Burt Beckwith——他的博客——类似于“独唱大军”)@JGFMK,人们多年前就停止使用Groovy了。他们现在回到了Java。尽管仍有一些人在寻找奇迹(科特林)。
public interface UserDao extends BaseDao{
    User getUserByUsername(String username);
}
public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao{

    public UserDaoImpl() {
    this(User.class);
    }
    private UserDaoImpl(Class<User> clazz) {
    super(clazz);
    }

    public User getUserByUsername(String name) {

    User user = null;
    try (Session session = HibernateUtils.getSessionFactory().openSession()) {
        String hql = "FROM User u WHERE u.username = :name";
        Query<User> query = session.createQuery(hql).setMaxResults(1);
        query.setParameter("name", name);
        user = query.uniqueResult();
    }
    return user;
    }
}