Hibernate creando objetos DAO para el sistema de facturación | Java
Una vez que tengamos todas las entidades es necesario crear nuestros objetos
DAO (Data Access Object) para poder obtener conectar la base de datos y
persistir los mismos, en este caso se ha creado una clase DAO por cada
entidad, esto nos permite generar métodos propios para obtener o insertar
datos en una determinada tabla.
Todas las clases DAO heredan de
GenericDAO.java
que se creo anteriormente, aquí vamos a listar todas la clases creadas pero no
se pondrá el código de todas ya que son muy parecidas y sobretodo puede llegar
a extender demasiado el post.
- CustomerDAO.java
- DatabaseLogDAO.java
- DatabaseTableDAO.java
- DetailDAO.java
- EmployeeDAO.java
- InvoiceDAO.java
- ModuleDAO.java
- PaymentMethodDAO.java
- PermissionDAO.java
- PersonDAO.java
- ProductDAO.java
- ProductCategoryDAO.java
- ProviderDAO.java
- RoleDAO.java
- TaxDAO.java
- UserDAO.java
- UserRoleDAO.java
Todas esas clases anteriores se añadieron a un paquete llamado "dao"
mientras que las entidades se añadieron a un paquete llamado "model", puedes
ver la lista de entidades
aquí.
import com.abigsite.facturationsystem.model.Customer;
import com.abigsite.facturationsystem.util.GenericDAO;
public class CustomerDAO extends GenericDAO<Customer> {
public CustomerDAO() {
super(Customer.class);
}
}
Este es el ejemplo básico de una clase DAO que será la encargada de la tabla
clientes, y no tiene nada más que un constructor básico.
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.abigsite.facturationsystem.model.User;
import com.abigsite.facturationsystem.util.GenericDAO;
import com.abigsite.facturationsystem.util.HibernateUtil;
public class UserDAO extends GenericDAO<User> {
private CriteriaBuilder criteriaBuilder;
private CriteriaQuery<User> criteriaQuery;
private Root<User> root;
private User user;
public UserDAO() {
super(User.class);
}
public boolean checkLoginData(String username, String password) {
Transaction transaction = null;
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
transaction = session.beginTransaction();
criteriaBuilder = session.getCriteriaBuilder();
criteriaQuery = criteriaBuilder.createQuery(User.class);
root = criteriaQuery.from(User.class);
criteriaQuery.select(root);
criteriaQuery.where(criteriaBuilder.equal(root.get("username"), username));
user = session.createQuery(criteriaQuery).uniqueResult();
transaction.commit();
} catch (HibernateException e) {
if (transaction != null)
transaction.rollback();
e.printStackTrace();
}
if (user != null && user.isStatus() && user.getPassword().equals(password))
return true;
return false;
}
public boolean userExist(String username) {
Transaction transaction = null;
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
transaction = session.beginTransaction();
criteriaBuilder = session.getCriteriaBuilder();
criteriaQuery = criteriaBuilder.createQuery(User.class);
root = criteriaQuery.from(User.class);
criteriaQuery.select(root);
criteriaQuery.where(criteriaBuilder.equal(root.get("username"), username));
user = session.createQuery(criteriaQuery).uniqueResult();
} catch (HibernateException e) {
if (transaction != null)
transaction.rollback();
e.printStackTrace();
}
if (user != null)
return true;
return false;
}
}
El ejemplo anterior es una clase DAO que no solamente hereda de la clase
genérica si no también tenemos métodos que solo funcionarían en esta clase,
por lo tanto lo que hacemos en las clases de acceso a datos es simplemente
métodos que nos permiten interactuar directamente con la base de datos.
El primer método de la clase UserDAO.java verifica si el usuario y contraseña
para acceder al sistema son correctos, mientras que el segundo método busca el
nombre de usuario para ver si es que ya existe uno con el mismo nombre que ha
intentado registrarse una nueva persona.
Comentarios
Publicar un comentario