Boas Práticas - DAO - Hibernate

Olá pessoal, a minha dúvida é eu coloco todos os meus selects nesta classe e puxo através de um properties ou existe algo melhor para fazer ?

package br.com.acp.dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import br.com.acp.form.UsuarioForm;

public class HibernateUtil {
	
	private static Session session = null;
	private static SessionFactory sessionFactory = null;
	static{
		try {
			Configuration cfg = new Configuration();
			cfg.configure();
			
			sessionFactory = cfg.buildSessionFactory();
		} catch (Throwable e) {
			e.printStackTrace();
		}
	}
	
	public static Session currentSession(){
		if(session == null){
			session = sessionFactory.openSession();
		}
	return session;
	}
	
	public static void closeSession(){
		if(session != null){
			session.close();
		}
	sessionFactory.close();
	}
	
}

procure mais sobre DAO e Singleton

tem como nossa amigo ai falou com Singleton ou por factory que é oq uso!!!

procura ai q vc acha !!!No guj msm tem !!

Mas o singleton não é apenas para não ficar gerando várias instâncias de uma classe. A minha dúvida é quanto aos selects, por exemplo, irão ter vários, eu queria saber se eu crio vários métodos para o select.

Vlw.

bom! vc pode ter uma procura generica!

e na sua classe Dao especifica vc coloca os select que voce tera q fazer

exemplo

Class Dao{
//select generico
}

Class UsuarioDao{
//selects especificos
}

estilo isso!!

agora para vc usar o Dao generico tem varios jeitos, como singleton, factory !!!

tendeu?

Acredito que sim. Vou fazer a DAO com um método simples de busca por ID e vou trabalhar com herança para fazer selects mais específicos tipo uma classe UsuarioDao e quanto ao design pattern vou dar uma estudada em factory porque singleton eu conheço.

Obrigado pela ajuda, estou iniciando com Hibernate, mas quero trabalhar com qualidade de código.

isso ai Ivan boa cara, tem q ser assim msm!!

vo te passar um post meu, q tem um padrao Factory mais usando EJB3, mais da para vc adaptar!!

http://www.guj.com.br/posts/list/134893.java#725715

é do jeito q uso!!!

vlws ai!

abraços

Vlw pela atenção Cherubini, vou tentar implementar!

qualquer coisa posta ai! q agente se vira ! :wink:

flws

Deixa eu dar o meu palpite.

Se você está usando Hibernate, a melhor maneira é trabalhar com DAO Genérico (no site do Hibernate tem uma implementação de exemplo). Esse DAO você pode usar em quase toda sua aplicação, você só deve extende-lo (por exemplo, criar o usuarioDAO) quando você realmente tem algo MUITO específico.

No caso das consultas via HQL, você pode usar as NamedQueries. Passe simplesmente o nome da NamedQuery para o método e ele te retorna o resultado. O mesmo pode ser feito para Criteria, você passa o Criterion para o método e ele retorna o resultado.

Dessa forma, você terá menos classes (menos DAOs) e consequentemente, menos código para manutenção. Garantindo que seu DAO genérico esteja OK, depois você tem que se preocupar apenas com Criteria e HQL.

Para recupear o DAO, você pode usar Factory ou então IoC/DI (Dependency Injection). Dependendo da sua arquitetura, um dos approachs pode ser mais fácil que o outro para implementar

vlws Jair!!

para ajudar, vo colocar o link que o Jair falou: https://www.hibernate.org/328.html

agora acho q já da para vc Ivan!!

abraços