unidades:10_servidor:05_basededatos
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| unidades:10_servidor:05_basededatos [2014/08/31 11:31] – admin | unidades:10_servidor:05_basededatos [2014/09/02 23:31] (actual) – [Interfaz DAO] admin | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| ====== 10.5 Base de datos ====== | ====== 10.5 Base de datos ====== | ||
| - | En este tema por fin vamos a tratar el tema del acceso a la base de datos. Todo lo que vamos a explicar en este tema es la parte mínima de mi otro [[http:// | + | En este tema por fin vamos a tratar el tema del acceso a la base de datos. Todo lo que vamos a explicar en este tema es la parte mínima de mi otro curso de [[http:// |
| - | Es decir que aquí vamos a hacer lo mínimo necesario para que funcione la capa de acceso a datos pero la forma correcta está explicada en el [[http:// | + | Es decir que aquí vamos a hacer lo mínimo necesario para que funcione la capa de acceso a datos pero la forma correcta está explicada en el [[http:// |
| - | ===== Base de datos ===== | + | Así que si este tema queda poco claro, recomiendo leerse el curso de [[http:// |
| + | |||
| + | ===== MySQL ===== | ||
| + | Lo primero es preparar la base de datos, para ello debes seguir los siguientes pasos: | ||
| + | * Instalar MySQL. Tienes un tutorial detallado de como instalarlo lo tienes en [[http:// | ||
| + | * En MySQL deberás lanzar el siguiente script: [[https:// | ||
| + | * En MySQL crear el siguiente usuario : " | ||
| + | * El usuario " | ||
| + | * Añadir el driver JDBC de MySQL. Tienes un tutorial detallado de como hacerlo en [[http:// | ||
| + | |||
| + | El script anterior creará una única tabla con los datos del seguro médico: | ||
| + | |||
| + | < | ||
| + | class seguromedico << | ||
| + | idSeguroMedico INT(11) | ||
| + | nif VARCHAR(10) | ||
| + | nombre VARCHAR(50) | ||
| + | ape1 VARCHAR(50) | ||
| + | edad INT(11) | ||
| + | sexo VARCHAR(1) | ||
| + | casado TINYINT(4) | ||
| + | numhijos INT(11) | ||
| + | embarazada TINYINT(4) | ||
| + | coberturaoftalmologica TINYINT(4) | ||
| + | coberturadental TINYINT(4) | ||
| + | coberturafecundacioninvitro TINYINT(4) | ||
| + | enfermedadcorazon TINYINT(4) | ||
| + | enfermedadestomacal TINYINT(4) | ||
| + | enfermedadrinyones TINYINT(4) | ||
| + | enfermedadalergia TINYINT(4) | ||
| + | nombrealergia VARCHAR(50) | ||
| + | } | ||
| + | |||
| + | note right of seguromedico | ||
| + | idSeguroMedico es la clave primaria | ||
| + | y es autoincremental | ||
| + | end note | ||
| + | |||
| + | </ | ||
| + | |||
| + | <note important> | ||
| + | Recuerda crear el usuario " | ||
| + | </ | ||
| + | |||
| + | ===== Modelo de datos ===== | ||
| + | La tabla " | ||
| + | |||
| + | < | ||
| + | class SeguroMedico { | ||
| + | int idSeguro | ||
| + | String nif | ||
| + | String nombre | ||
| + | String ape1 | ||
| + | int edad | ||
| + | Sexo sexo | ||
| + | boolean casado | ||
| + | int numHijos | ||
| + | boolean embarazada | ||
| + | Coberturas coberturas | ||
| + | Enfermedades enfermedades | ||
| + | } | ||
| + | |||
| + | class Enfermedades { | ||
| + | boolean corazon | ||
| + | boolean estomacal | ||
| + | boolean rinyones | ||
| + | boolean alergia | ||
| + | String nombreAlergia | ||
| + | } | ||
| + | |||
| + | class Coberturas { | ||
| + | boolean oftalmologia | ||
| + | boolean dental | ||
| + | boolean fecundacionInVitro | ||
| + | } | ||
| + | |||
| + | class Sexo << | ||
| + | H | ||
| + | M | ||
| + | } | ||
| + | |||
| + | SeguroMedico -- Coberturas | ||
| + | SeguroMedico -- Enfermedades | ||
| + | SeguroMedico - Sexo | ||
| + | </ | ||
| + | |||
| + | Como vemos las clases son iguales al sistema de clases que teníamos en el modelo de JavaScript , por lo que transformando la clase '' | ||
| ===== Interfaz DAO ===== | ===== Interfaz DAO ===== | ||
| + | ¿Recuerdas que al tratar con la librería de JSON llamada Jackson encapsulamos su funcionamiento bajo un interfaz?. Para el acceso a la base de datos vamos a hacer lo mismo por ello vamos a crear el interfaz '' | ||
| + | |||
| + | El siguiente diagrama en UML muestra los métodos y relaciones del interfaz: | ||
| + | |||
| + | <uml> | ||
| + | class SeguroMedicoDAO << | ||
| + | void insert(SeguroMedico seguroMedico) throws BussinessException | ||
| + | void update(int idSeguroMedico, | ||
| + | SeguroMedico get(int idSeguroMedico) throws BussinessException | ||
| + | void delete(int idSeguroMedico) throws BussinessException | ||
| + | List< | ||
| + | } | ||
| + | |||
| + | class BussinessException | ||
| + | List< | ||
| + | } | ||
| + | |||
| + | |||
| + | |||
| + | class BussinessMessage | ||
| + | String fieldName | ||
| + | String message | ||
| + | } | ||
| + | |||
| + | SeguroMedicoDAO -> BussinessException | ||
| + | SeguroMedicoDAO --> SeguroMedico | ||
| + | | ||
| + | BussinessException | ||
| + | |||
| + | Exception <|-- BussinessException | ||
| + | </ | ||
| + | |||
| + | |||
| + | Lo interesante de la clase '' | ||
| + | |||
| + | Es decir que cuando cualquiera de los métodos quiera comunicarnos que ha habido algún problema para procesar la petición ((que no un error de programación)) se lanzará una '' | ||
| + | |||
| + | |||
| + | La clase que implementa el interfaz '' | ||
| + | |||
| + | <uml> | ||
| + | class SeguroMedicoDAO << | ||
| + | } | ||
| + | |||
| + | SeguroMedicoDAO <|.. SeguroMedicoDAOImplJDBC | ||
| + | </ | ||
| + | |||
| + | Ahora le tenemos que decir a Spring que existe esa clase para que pueda inyectarla cuando sea necesario, por ello en el fichero '' | ||
| + | |||
| + | <sxh xml> | ||
| + | <bean class=" | ||
| + | </ | ||
| + | |||
| + | Ya que la clase '' | ||
| + | |||
| + | Ahora en los controladores de Spring ya podremos hacer lo siguiente | ||
| + | <sxh java> | ||
| + | @Autowired | ||
| + | SeguroMedicoDAO seguroMedicoDAO; | ||
| + | </ | ||
| + | |||
| + | Y por lo tanto tener acceso al DAO sin estar acoplados a una implementación concreta del DAO en el código del controlador. Lo que nos permitiría en un futuro cambiar la implementación a Hibernate, a JPA, etc. sin tener que tocar nada de los controladores. | ||
| + | |||
| + | |||
| + | ===== Pool de conexiones ===== | ||
| + | Ya hemos configurado la base de datos y creado todas las clases Java necesarias, pero nos falta una última cosa por hacer: Configurar el pool de conexiones. | ||
| + | |||
| + | Dicho de forma que se entienda rápido , el pool de conexiones lo podríamos ver simplemente como una cache de conexiones para tener acceso rápidamente a una conexión cada vez que llega una petición al servidor web. Es decir es una funcionalidad delservidor Web que nos ayuda a mejorar el rendimiento de la aplicación. | ||
| + | |||
| + | La forma de activar el pool de conexiones es añadiendo al fichero '' | ||
| + | <sxh xml> | ||
| + | < | ||
| + | type=" | ||
| + | auth=" | ||
| + | name=" | ||
| + | driverClassName=" | ||
| + | url=" | ||
| + | username=" | ||
| + | password=" | ||
| + | |||
| + | maxActive=" | ||
| + | maxIdle=" | ||
| + | maxWait=" | ||
| + | validationQuery=" | ||
| + | /> | ||
| + | </ | ||
| + | |||
| + | Si quieres una información detalla sobre el pool de conexiones e información sobre como se configura y utiliza, la tienes en [[http:// | ||
| - | ===== Implementacion ===== | ||
| ===== Ejemplo ===== | ===== Ejemplo ===== | ||
| + | El ejemplo de esta unidad es exactamente lo que acabamos de contar pero en un nuevo proyecto llamado " | ||
| - | ===== Referencias ===== | + | Para aclarar mas el ejemplo vamos a hacer un pequeño resumen de los cambios en el proyecto respecto al ejemplo del tema anterior: |
| + | * Se han añadido las siguientes clases referidas al modelo de datos: | ||
| + | * SeguroMedico | ||
| + | * Coberturas | ||
| + | * Enfermedades | ||
| + | * Sexo | ||
| + | * Se han añadido las siguientes clases para el acceso a datos mediante el DAO | ||
| + | * SeguroMedicoDAO | ||
| + | * SeguroMedicoDAOImplJDBC | ||
| + | * BussinessException | ||
| + | * BussinessMessage | ||
| + | * Se ha modificado el fichero '' | ||
| + | * Se ha modificado el fichero '' | ||
| + | * Se ha instalado la base de datos junto con la tabla '' | ||
| + | * Se han reorganizado los paquetes Java para que se organicen según la siguiente estructura: | ||
| + | * Paquete '' | ||
| + | * Paquete '' | ||
| + | * Paquete '' | ||
| + | Se muestra ahora la imagen con la estructura del proyecto: | ||
| + | {{: | ||
| + | <note tip> | ||
| + | Los paquetes Java empiezan por '' | ||
| + | </ | ||
| + | |||
| + | Por último hemos modificado el controlador para usar ahora como ejemplo la clase del modelo '' | ||
| + | * El controlador ahora se llama '' | ||
| + | * Hemos usado el DAO para obtener los datos realmente de la base de datos en vez de ponerlos directamente en el código como se hacía en el tema anterior. | ||
| + | |||
| + | El código Java de '' | ||
| + | <sxh java; | ||
| + | @Controller | ||
| + | public class SeguroMedicoController { | ||
| + | | ||
| + | @Autowired | ||
| + | private JsonTransformer jsonTransformer; | ||
| + | | ||
| + | @Autowired | ||
| + | SeguroMedicoDAO seguroMedicoDAO; | ||
| + | | ||
| + | @RequestMapping(value = {"/ | ||
| + | public void prueba(HttpServletRequest httpRequest, | ||
| + | SeguroMedico seguroMedico=seguroMedicoDAO.get(1); | ||
| + | String jsonSeguroMedico=jsonTransformer.toJson(seguroMedico); | ||
| + | | ||
| + | httpServletResponse.getWriter().println(jsonSeguroMedico); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | * Línea 7: Esta línea le dice a Spring que debe buscar una implementación del interfaz que hay a continuación y asignarle una instancia a la propiedad. | ||
| + | * Línea 8: Declaramos ahora la propiedad privada seguroMedicoDAO pero no indicamos el objeto que lo implementa. Spring inyectará una instancia de la clase '' | ||
| + | * Línea 12: Hacemos uso del DAO para obtener los datos del seguro médico identificado por el '' | ||
| + | |||
| + | Si ahora navegamos a la URL [[http:// | ||
| + | {" | ||
| + | |||
| + | < | ||
| + | Este ejemplo se encuentra en git en [[https:// | ||
| + | </ | ||
| + | ===== Referencias ===== | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
unidades/10_servidor/05_basededatos.1409477497.txt.gz · Última modificación: por admin
