Olá,
tenho hoje a estrutura abaixo de DAO e estou migrando para Spring onde poderia
encontrar algo para ter suporte e entendimento do Spring.
Se alguém possuir exemplo e tutorial sobre assunto agradeço.
abs
public class HibernateUtil {
private static final Logger logger = Logger.getLogger(HibernateUtil.class);
private static final SessionFactory sessionFactory;
private static ThreadLocal<Session> sessions = new ThreadLocal<Session>();
static {
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
}
public static Session openSession() {
if (sessions.get() != null) {
logger.error("Essa sessão está ainda aberta !! ");
// grave, alguem nao fechou uma sessao ja aberta!
}
sessions.set(sessionFactory.openSession());
return sessions.get();
}
public static void closeCurrentSession() {
sessions.get().close();
sessions.set(null);
}
public static Session currentSession() {
return sessions.get();
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
public interface DAO {
/**
* Método de procura genérico, baseado na entidade passada como exemplo.
*
* @param entity
* A entidade utilizada como exemplo na busca.
* @return A entidade caso ela seja encontrada, <code>null</code> do
* contrário.
* @throws DAOException
*/
<T> T find(Class<T> classe, Serializable id) throws DAOException ;
/**
* Método de atualização genérico, faz a atualização dos dados da entidade
* informada.
*
* @param entity
* A entidade a ser atualizada.
* @throws DAOException
*/
<T> void merge(T entity) throws DAOException;
/**
* Método de persistência genérico, salva no banco a entidade informada.
*
* @param entity
* A entidade a ser persistida.
* @throws DAOException
*/
<T> void persist(T entity) throws DAOException;
/**
* Método de remoção genérico, remove do banco a entidade informada.
*
* @param entity
* A entidade a ser removida.
* @throws DAOException
*/
<T> void remove(T entity) throws DAOException;
---
public class BaseDAO implements DAO {
private static Logger logger = Logger.getLogger(BaseDAO.class);
protected Session session;
public BaseDAO(Session session){
this.session = session;
}
@SuppressWarnings("unchecked")
public <T> T find(Class<T> classe, Serializable id) throws DAOException {
logger.info("Listando Id="+id);
return (T) session.get(classe, id);
}
public <T> void merge(T entity) throws DAOException {
logger.info("Salvando ou atualizando " + entity);
session.saveOrUpdate(entity);
}
public <T> void persist(T entity) throws DAOException {
logger.info("salvando " + entity);
session.save(entity);
}
public <T> void remove(T entity) throws DAOException {
logger.info("Deletando " + entity);
session.delete(entity);
}
}
---
public class UsuarioDAOImpl extends BaseDAO implements UsuarioDAO{
@SuppressWarnings("unused")
private static Logger logger = Logger.getLogger(UsuarioDAOImpl.class);
public UsuarioDAOImpl(Session session) {
super(session);
}
@SuppressWarnings("unchecked")
public Collection<Usuario> findByName(String nome) throws DAOException{
Criteria c = session.createCriteria(Usuario.class);
c.add(Restrictions.like("nomeUsuario", "%" + nome.toUpperCase() + "%"));
c.addOrder(Order.asc("nomeUsuario"));
return (Collection<Usuario>) c.list();
}
}
}