Partiendo de una petición hecha por un usuario a través de una petición web, vamos a obtener una lista de editoriales.
Teniendo en cuesta que ya existe una peticón de 'getUsers', simplemente haremos lo mismo pero con las editoriales.
Partiremos de la clase UserController (myapp/src/main/java/org.appfuse.web), aquí nuestra clase controlador es quien recibira la petición hecha y controlará a donde se redireccionará y que datos debemos cargar.
Por lo tanto, debemos pedir los datos a cargar, que para ellos y sabiendo que pedimos las editoriales, debemos hacer una consulta a nuestra base de datos para pedir las editoriales.
Mediante el diagrama que hemos mostrado, nuestra clase UserController se comunicarña con la clase EditorialManager (que es un Servicio). Ésta a su vez se comunicara con un DAO y ésta a su vez hara la consulta pertinente.
Empezaremos creando un EditorialManager y se la añadiremos a la clase UserController. Por lo tanto nos quedaría:
@Autowired
private EditorialManager editorialManager;
Ahora debemos crear una interfaz EditorialManager. La interfaz la crearemos en: myapp/src/main/java/org.appfuse.service.
Esta interfaz sólo tendrá el método getEditoriales. Por lo tanto nos quedará:
public interface EditorialManager {
public List
getEditorial();
}
Puesto que es una interfaz, debemos implemetar sus métodos con una clase que crearemos en myapp/src/main/java/org.appfuse.service.impl. La clase la llamaremos EditorialManagerImp.
Puesto que nuestro Manager (servicio) se comunica con el Dao, crearemos un dao con el nombre editorialDao de la clase EditorialDao que crearemos posteriormente. Y ahora implementaremos los métodos de la implementación y los getters & setter del editorialDao.
(Recuerda que si al editorialDao le pones otro Nombre cómo dao, hacer un método setEditorialDao)
Al final obtendremos:
public class EditorialManagerImpl implements EditorialManager
{
public EditorialDao editorialDao;
@Override
public ListgetEditorial() {
return editorialDao.getEditorial();
}
public getEditorialDao(){ return this.editorialDao;
}public setEditorialDao( EditorialDao editorialdao)
{
this.editorialDao=editorialDao;
}}
En estos momentos nos dirá que no existe la clase EditorialDao y por lo tanto no reconoce la variable editorialDao. Crearemos el interfaz EditorialDao en el paquete org.appfuse.dao, y le añadiremos el método getEditorial.
Una vez creada la interfaz vamos retocar un archivo de configuración para decirle que siempre que se quiera acceder a la interfaz EditorialManager, se debe ir a su implementación EditorialmanagerImpl. Para ello accdemos al applicationContext.xml (myapp/src/main/webapp/WEB-INF) y añadiremos:
Añadimos el Bean de editorialManager. (buscad por el id)
Aquí podeis ver el applicationContect.xml.
Una vez modificado el application-context, insertaremos el método getEditoriales a la interfaz.
public interface EditorialDao {
public List
getEditorial();
}
Pueto que es una interfaz, ahora debemos implementarla. Para ello nos crearemos una clase EditorialDaoImp y la guardaremos en el paquete org.appfuse.dao.impl. Y le diremos que extienda de HibernateDaoSupport para que se pueda conectar a la base de datos e implemente de la interfaz EditorialDao.
En el método getEditoriales, haremos una consulta a la base de datos a traves de la siguiente linea de código:
getHibernateTemplate().find("from Editorial")
Ésto nos devolvería una lista de Editoriales, qué es lo que deseamos, por lo tanto esto lo iremos devolviendo hasta llegar al UserControler.
Al final nos quedará:
public class EditorialDaoImpl extends HibernateDaoSupport implements
EditorialDao {
@Override
public
ListgetEditorial() {
return
getHibernateTemplate().find("from Editorial");
}}
Al igual que antes modificamos el applicationContext, ahora debemos modificar el applicationContext-hibernate para decirle que siempre que se llame a la interfaz donde debe buscar su implementación. Y a parte para decirle que donde debe ir a buscar la tabla cuando haga la consulta y que estructura seguirá.
Con ello le decimos que siempre que se acceda a la interfaz editorialDao su clase de implementación es EditorialDaoHibernate
Añadiremos esta línea dentro del List:
Aqí le decimos que existirá una tabla basado en la estructura encontrada en Editorial-hbm.xml.
Ahora necesitamos crear el xml Editorial-hbm.xml (paquete: org/appfuse/model). Cuyo cuerpo será:
Con la etiqueta 'table', creará una tabla con el nombre que le pongamos, en este caso 'app_editorial'. Nuestra tabla sólo tendrá dos parámetros, una id y un nombre, cuyo id será una clave.
Sólo faltaría decirle al UserController que siempre que se llame a la página Editoriales.html nos carge una lista de editoriales, y para ellos usaremos el model.
@RequestMapping("/editoriales.html")
public String executeEditorial(ModelMap
model){
model.addAttribute("listaEditoriales",userManager.getEditoriales());
return "editorialList";
}
Tan sólo faltaría modificar nuestro jsp y decirle que nos muestre la tabla que hemos denominado "listaEditoriales".
El jsp lo crearemos en myapp/src/main/webapp, y le pondremos el nombre de 'editorialList', que le hemos dicho en el UserController.
Aquí podeis ver el código.
2 comentarios:
esto si que te lo has currado!
muy buen ejemplo. una sugerencia el codigo que esta en el ejemplo si lo pusieras en zip o tar.gz no caeria mal ;) otra sugerencia si no es mucho pedir en los comentarios del codigo podrias poner una especie de explicacion.
Publicar un comentario