Consulta usando Hibernate
Para realizar la consulta que genera un archivo xml con los datos almacenados en nuestra base de datos: Inicialmente, s
-
Luego en el servlet que agregamos, trabajamos ya directamente con la clase NewHibernateUtil, con la cual obtenemos el objeto sessionfactory, con el que crearemos una sentencia hql (hibernate query language), directamente con el objeto universidad, porque si revisamos un poquito, encontramos que hibernate nos permite mapear atributos de una base de datos relacional a un modelo orientado a objetos en nuestra aplicación.
-
Para ello la sentencia será private static String QUERY=»from Universidad u»; la cual almacenamos en una constante de tipo String.
-
Luego definimos un método para ejecutar esa sentencia, y le enviamos además un objeto PrinterWriter, el cual al final, nos permitirá escribir sobre el archivo xml a generar.
try {
Session session = NewHibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Query q = session.createQuery(hql);
List resultList = q.list();
displayResult(resultList,out);
session.getTransaction().commit();
} catch (HibernateException he) {
he.printStackTrace();
}
}
Donde displayResults es: ya generar el archivo xml
private void displayResult(List resultList,PrintWriter out) { out.println(«<?xml version=’1.0′ encoding=’iso-8859-1′?>»);
out.println(«<datos>»);
for (Object o : resultList) {
Universidad univ = (Universidad) o;
out.println(«<universidad>» +
«<codigo>»+univ.getCodigo()+»</codigo>» +
«<nombre>»+univ.getNombre()+»</nombre>» +
«<coordenadas>» +
«<latitud>» +univ.getLatitud()+»</latitud>» +
«<longitud>» +univ.getLongitud()+»</longitud>» +
«</coordenadas>» +
«<pais>» +univ.getPais()+»</pais>»+
«<url>» +univ.getUrl()+»</url>»+
«</universidad>»);
}
out.println(«</datos>»); }
Observación: Usamos o especificamos encoding=’iso-8859-1′ para que nos permita el uso de tildes y ñ, pues de lo contrario nos da error usando la codificación UTF-8.
Y así en el processRequest del servlet, simplemente llamamos a un método runQuery
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(«text/xml»);
PrintWriter out = response.getWriter();
try{
runQuery(out);
}catch(Exception e){
out.println(e.getMessage());
out.close();
}
}
Donde runQuery es un método que simplemente llama al executeHQLQuery:
private void runQuery(PrintWriter out) {
executeHQLQuery(QUERY,out);
}
Importamos del paquete hibernate:
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
Carla Salvatierra Arellano