Cuando desarrollamos Software con Java haciendo uso de JPA pensamos en que nos olvidaremos de las consultas SQL que normalmente hacemos para obtener información de una base de datos, sin embargo puede darse la necesidad de recurrir a usar consultas SQL nativas en JPA, para ello en este artículo de forma fácil y rápida te explicare como hacerlo.
Como usar consultas SQL nativas en JPA Java (Java Persistence API)
Debemos tener en cuenta que nuestro proyecto debe estar configurado para trabajar con JPA y correctamente conectado a una base de datos MySQL, si no es así puedes pasar por el siguiente artículo donde podrás ver la explicación paso a paso:
¿Como empezamos a utilizar las consultas SQL nativas en JPA?
Eres libre de organizar tu proyecto, sin embargo recomiendo crear una clase en la cual colocarás todas tus consultas, para que estas estén disponibles en todo tu proyecto, coloquemos de nombre a la clase Nativas.java.
Llenando un JTable en Java mediante una consulta SQL nativa en JPA
public Query getClientes(){ EntityManagerFactory emf = Persistence.createEntityManagerFactory("Unidad_Persistencia"); EntityManager em=emf.createEntityManager(); String Consulta = "SELECT identificacion, nombres, apellidos, direccion, telefono FROM clientes"; Query q=em.createNativeQuery(Consulta); return q; }
La consulta anterior nos permite a través de una consulta SQL nativa en JPA extraer todos los clientes de nuestra tabla, si nos damos cuenta retornamos un objeto de tipo Query, Veamos como obtenemos los datos.
🌟 ¡Visita Nuestra Tienda para Programadores! 🌟Descubre Códigos Fuente, Cursos, Software, Computadoras, Accesorios y Regalos Exclusivos. ¡Todo lo que necesitas para llevar tu programación al siguiente nivel!
private void Cargar_Clientes(){ try { Query q = Nativas.getClientes(); List r = q.getResultList(); Object O[]=null; for (int i = 0; i < r.size(); i++) { Object obj = r.get(i); Object[] objectArray = (Object[]) obj; Modelo1.addRow(O); Modelo1.setValueAt(objectArray[0], i, 0); Modelo1.setValueAt(objectArray[1], i, 1); Modelo1.setValueAt(objectArray[2], i, 2); Modelo1.setValueAt(objectArray[3], i, 3); Modelo1.setValueAt(objectArray[4], i, 4); } } catch (Exception e) { JOptionPane.showMessageDialog(null, "Error Cargando clientes - "+e.getMessage()); } }
En el código anterior obtenemos los datos de la consulta realizada y los almacenamos en una Lista, luego podemos iterar dicha lista para llenar una tabla, cada valor puede ser accedido mediante el índice en cada iteración del for, ejemplo en la primera iteración tenemos en objectArray el primer registro o entidad, al pasar el índice del primer resultado objectArray[0], podemos obtener la identificación, la parte que dice: Modelo1.setValueAt(objectArray[0], i, 0)… es por que estamos llenando un JTable, sin embargo solo es para efectos del ejemplo, puedes asignar tus datos al componente que desees.
Contando registros mediante una consulta SQL nativa en JPA
public Query Count(int id, String var){ EntityManagerFactory emf = Persistence.createEntityManagerFactory("Persis"); EntityManager em = emf.createEntityManager(); String Consulta = "SELECT COUNT(`id`) AS l FROM `tabla` WHERE `id`='"+id+"' AND `campo2`='"+var+"'"; Query q = em.createNativeQuery(Consulta); return q; }
También podemos pasar parámetros a la consulta para el ejemplo del anterior count, pasamos dos valores para incluirlos en la consulta nativa, Count(int id, String var).. los datos los obtenemos de la misma forma que en la consulta anterior con Select, esto es válido para todos los tipos de consulta, update, delete, insert, etc.