Persistencia con MySQL y Spring Framework (mediante a JDBC Template)

Bien, comenzamos este apartado donde nos adentraremos en la persistencia mediante a Spring Boot, más concretamente, trabajaremos con Spring Framework y su módulo de JDBC Template. Para realizar este tutorial, nos basaremos en el proyecto de Spring Boot que creemos en nuestro artículo: Creando un proyecto de Spring Boot.

Para comenzar a hablar sobre JDBC Template, primeramente nos debemos situar previamente en el proyecto de Spring en que nos encontramos:

  • Spring Framework: el cual nos proporciona un completo modelo de programación y configuración para aplicaciones empresariales modernas basadas en Java, en cualquier tipo de plataforma de implementación.

1. Añadiendo las dependencias en el fichero pom.xml para trabajar con JDBC Template y MySQL

Antes de continuar, vamos a añadir/modificar las dependencias necesarias. Para ello, vamos a nuestro fichero pom.xml en el que añadiremos las dependencias. Os recordamos que las podéis buscar dependencias desde: https://mvnrepository.com. Aunque os dejaré los enlaces un poquito más abajo junto a cada dependencia. Las dependencias a añadir son:

  • Spring-boot-starter-web: Iniciador para la creación de sitios web, incluidas las aplicaciones RESTful, que utilizan Spring MVC. Utiliza Tomcat como el contenedor embebido predeterminado
  • Mysql-connector-java: JDBC Type 4 driver for MySQL.
  • Spring-boot-starter-jdbc: Starter for using JDBC with the HikariCP connection pool

Spring Framework

Spring Framework, es el encargado de ofrecernos Data Access/Integration, que está compuesto por: ORM, JDBC, JPA, JMS y Transactions.

En este caso, nosotros vamos a trabajar principalmente con JDBC. Por tanto, en este caso, estamos trabajando con el proyecto de Spring Framework, concretamente, con el módulo de JDBC y también utilizaremos los módulos de ORM y Transations.

2. Creando la base de datos (BBDD) y añadir datos (INSERTS)

Para ello, primeramente necesitamos una BBDD. Para poder trabajar con BBDD, necesitamos un gestor de bases de datos (SGBD). El escogido, será MySQL Workbench. Crearemos una BBDD llamada DB_MUSIC y una tabla SINGER.

El código resultante sería:

Y podemos comprobar que tenemos la siguiente tabla con dos registros.

Java Database Connectivity (JDBC)

En artículos anteriores, ya trabajemos con Java Database Connectivity (JDBC). Os dejo el primero: Conectando una BBDD con JDBC y MySql el cual considero imprescindible de leer para seguir este tutorial, sobre todo si no habéis trabajado anteriormente con JDBC. Ya que hay conceptos que es necesario entender para tener una base de cómo funciona. En dicho artículo, realizábamos la conexión en nativo. Es decir, solamente con Java, sin utilizar Spring Boot.

Las desventajas de implementar este sistema para gestionar las BBDD en nativo desde Java, son muchas como: el tener que realizar el control de errores, el control de excepciones para dichos errores, el abrir y cerrar conexiones, etc. Por si todo esto fuera poco, para colmo, la mayoría de aplicaciones que realizaremos con Spring Boot, estarán centrar en un nivel empresarial, por lo que podemos afirmar, que estas BBDD suelen ser de una gran envergadura. Lo cual únicamente nos dará más dolores de cabeza.

¿Qué beneficios nos ofrece JDBC Template vs JDBC nativo?

En la introducción de Spring, ya comentemos que nació para solucionarnos la vida, y para ello, crearon Spring Template. La finalidad de la creación de JDBC Template, es el evitarnos tener que realizar las tareas rutinarias que hemos definido en el párrafo superior.

El JDBC template, nos otorga muchos beneficios comparado con JDBC en nativo. Los principales son:

  • No necesitamos ficheros JAR externos, solamente añadir una dependencia al fichero pom.xml.
  • Nos permite realizar la conexión a la BBDD de una forma sencilla mediante a instrucciones sencillas que definirán dicha conexión.
  • Libera las conexiones de BBDD: es decir, cierra y abre las conexiones automáticamente como pueden ser Connection, Statement, ResultSet…
  • Proporciona métodos para ejecutar sentencias SQL directamente.
  • Nos proporciona varios mecanismos de detención de errores como son:
    • SQLExceptions.
    • RuntimeExceptions.
  • JDBC template, nos convierte traduce las descripciones de mensajes de errores para que los mensajes sean más claros y por tanto, más entendibles.

3. Definiendo los parámetros de conexión

En este caso en particular, únicamente vamos a definir los parámetros de conexión.

¿Qué son los POJOS?

POJO significa Plain Old Java Object. Se trata de una clase común y corriente mediante a la que crearemos objetos en Java. Estos objetos, no tienen ninguna restricción especial que no sea forzada por la especificación de lenguaje Java y que no requiera ninguna ruta de clase. POJOs se utilizan para aumentar la legibilidad y la reutilización de un programa. Los POJOs, han ganado la mayoría de la aceptación porque son fáciles de escribir y de entender. Se introdujeron en EJB 3.0 por microsistemas Sun. Son, nada más y nada menos, que los objetos con los que vamos a intercambiar los datos de BBDD. En este caso, en los que volcaremos los datos que tenemos almacenados dentro de la BBDD o viceversa.

En próximos artículos trabajaremos con otro sistema de gestión de BBDD llamado JPA, que trabajará con POJOS y anotaciones como las de la siguiente imagen.

En este caso, realizaremos querys naturales, sin pasar el resultado a objetos y pasando el resultado a objetos mediante a lo que se conoce como ORM.

4. Creando la primera aplicación Monolito

Si metemos todo en un controlador, empezamos con las malas prácticas de programación. Estaríamos haciendo un tipo de programación de monolito, que sería algo así, como juntar todo el código en un fichero. Es una práctica de programación nada recomendable. Pero que nos servirá para entender mejor el código antes de subdividirlo. Vamos a ver un ejemplo:

Empezamos por la estructura del proyecto, que estará formada por un controller y la clase main.

En el controller escribiremos:

La anotación @Autowired, nos permite no tener que definir la propiedad que se quiere inyectar en el XML dentro del bean. La anotación @Autowired, por tanto, se debe poner encima del atributo que se quiere inyectar. En nuestro caso en específico, sobre JdbcTemplate con el fin de inyectar dicha dependencia en esta clase, para posteriormente, poder trabajar con ella.

Si arrancamos el proyecto, podemos ver que ya tenemos la consulta realizada.

Aunque si nos fijamos dicha salida se muestra mediante a un String.

Microservicios y capas

Hasta ahora, hemos realizado alguna modificación en Spring pero no hemos modificado la estructura del proyecto. Ahora, vamos a ver la estructura correcta. En microservicios, aunque hablaremos más adelante de ello, se trata de un sistema de división multicapa, donde cada capa tiene una finalidad.

Hasta ahora, hemos realizado la conexión mediante de una BBDD a JDBC y que muestra la información en formato String mediante a un controller. Sería algo similar a lo que hacemos con la flecha roja.

Ahora vamos a tratar de realizar lo de la flecha verde, de dos maneras, primeramente devolviendo un string y posteriormente, mapeando un objeto. Aunque también podríamos ir subiéndolo a capas superiores desde repositorio, como por ejemplo hacía el servicio y finalmente enviarlo al controlador (a este punto no se llegará en este tutorial).

5. Aplicando un sistema de capas

Para ello, tenemos primeramente crearemos la siguiente estructura:

En el repositorio, en este caso, tendremos que realizar la inyección mediante @Autowired de JdbcTemplate. Y esta capa será la encargada de trabajar con datos. Y nos quedará de la siguiente manera:

El controller, lo modificamos, para que en vez de inyectar el JdbcTemplate , inyecte el repositorio. Ya que es este (el repositorio), el que trabaja por debajo trabajar con jdbcTemplate. Ahora, por tanto, la única función que tiene el controlador, controlar hacía donde va dicha información.

Si hacemos un re-run de la aplicación, podemos ver que el resulado es el mismo. Pero que hemos dividido lo mismo que antes en un sistema multi capa, como si de una cebolla se tratase. Y ahora tenemos el código mejor estructurado, gracias a ello, nos será más fácil el identificar que hace cada clase y donde está ubicada.

6. POJOS

Hasta ahora, hemos duplicado lo del monolito, pero a un sistema de varias capas. Ahora, vamos a añadir otra capa más a este sistema con el fin de que realizar lo que que se conoce bajo el término de ORM ( Object Relational Mapping ) o DAO (Data Access Object).

Un ORM o DAO, nos permite convertir datos de una BBDD a objectos y viceversa.

Para realizar dicho mapeo, necesitamos crear un objeto POJO Singer, en el que añadiremos los campos a mapear. En este caso en particular, los datos de la tabla SINGER.

7. Mapeando a la forma tradicional

Vamos a mapear el objeto para devolverlo en un JSON, pero esta vez “de verdad”. Con de verdad, queremos decir que, no nos envíe un String que contenga toda la información del objecto al JSON. Lo entenderéis mejor cuando veamos el resultado más abajo.

Repositorio:

Controller:

Finalmente, arrancamos el proyecto y verificamos el resultado:

Este JSON, puede ser presentado de una forma más bonita, más elegante si instalamos el plugin de JSON Viewer para Chrome.

Y podremos con esto, incluso minimizar registros del JSON.

8. Mapeo automático

Existen maneras más realizar el mapeo entre POJOS y BBDD automáticamente, con lo que nos evitaremos fallos, y ganaremos bastante tiempo.

Repositorio:

Controller:

Bueno, pues ya hemos algunas de las maneras de realizar querys con JDBC Template, espero, que os haya servido. Un saludo javer@s!

21 comentarios

  1. I am no longer positive where you are getting your information, but great topic.
    I must spend some time finding out much more or figuring out more.
    Thank you for fantastic information I was looking for this info for my mission.

  2. Quality posts is the secret to interest the visitors
    to pay a visit the site, that’s what this site is providing.

  3. I don’t even know how I ended up here, but I thought this post was great.
    I don’t know who you are but certainly you’re going to a
    famous blogger if you aren’t already 😉 Cheers!

  4. Hi, I check your blog regularly. Your humoristic style is awesome, keep doing what you’re doing!

  5. I have been exploring for a bit for any high-quality articles or weblog posts in this kind of space .
    Exploring in Yahoo I finally stumbled upon this website.

    Reading this information So i am glad to convey that I have a very good uncanny feeling I found out just what I needed.

    I most surely will make sure to do not omit this website and give it a look on a constant basis.

  6. I am impressed with this web site, rattling I am a big fan.

    Also visit my web-site: Vialis Male Enhancement Reviews (Launa)

  7. Some really marvelous work on behalf of the owner of this site, absolutely outstanding content.

    my site – Luiresse Review [http://www.l2kimi.com]

  8. I like what you guys are up too. This type of clever work and
    exposure! Keep up the good works guys I’ve added
    you guys to blogroll.

  9. I am regular visitor, how are you everybody?
    This piece of writing posted at this site is genuinely nice.

    Feel free to visit my website :: Ketoroll

  10. hey there and thank you for your info – I’ve
    certainly picked up something new from right here.
    I did however expertise some technical points using this
    web site, since I experienced to reload the website a lot
    of times previous to I could get it to load properly.
    I had been wondering if your web hosting is OK?
    Not that I’m complaining, but sluggish loading instances times will sometimes affect your placement in google and could damage your high quality score if advertising and marketing with Adwords.
    Anyway I am adding this RSS to my email and can look out for a lot more
    of your respective fascinating content. Make sure you update this again soon.

  11. I have read so many articles or reviews on the topic of the blogger lovers
    however this post is genuinely a pleasant article, keep it up.

    My blog post Vigor Max

  12. I was recommended this web site by my cousin. I’m not sure
    whether this post is written by him as nobody else know
    such detailed about my problem. You are amazing!
    Thanks!

    Feel free to surf to my web page Optimum Keto

  13. You need to be a part of a contest for one of the most useful websites on the
    internet. I am going to highly recommend this web site!

    Also visit my page Pure Keto Burn Review

  14. Spot on with this write-up, I seriously believe that
    this site needs a great deal more attention. I’ll probably be returning to read through more,
    thanks for the advice!

  15. Howdy! I’m at work surfing around your blog from my new iphone 3gs!

    Just wanted to say I love reading through your blog and look forward to all your posts!

    Carry on the great work!

    Review my homepage; http://www.koan.at/

  16. Sweet website, super design, really clean and apply pleasant.

    Feel free to visit my blog post – http://www.koan.at

  17. Nice post. I learn something totally new and challenging
    on websites I stumbleupon on a daily basis. It will always be useful to read articles from other writers and practice something from other web sites.

  18. I love reading an article that can make men and women think.
    Also, thank you for allowing for me to comment!

  19. This information is invaluable. Where can I find out more?

  20. Ahaa, its good conversation on the topic of this piece
    of writing here at this weblog, I have read all that, so at this
    time me also commenting here.

  21. I truly love your website.. Very nice colors & theme. Did you build this site yourself?
    Please reply back as I’m planning to create my very own blog and want
    to know where you got this from or just what the theme is named.

    Thank you!

    Also visit my webpage :: Reneaux Face Serum

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

La Ley 34/2002 nos obliga a avisarte de que usamos cookies propias y de terceros con objetivos estadísticos y de sesión y para mostrarte la 'publi' que nos da de comer. Tranquilo, este mensaje solo sale una vez. Más información

Java desde 0 comunica a los usuarios, a través de este aviso, que puede utilizar cookies cuando el usuario navega por las diferentes pantallas y páginas del sitio. Durante el uso de nuestra página Web usted acepta y autoriza expresamente el uso de cookies, de acuerdo con nuestra Política de Privacidad. Este sitio web utiliza las siguientes cookies propias: - Cookies de sesión, para garantizar que los usuarios que escriban comentarios en el blog sean humanos y no aplicaciones automatizadas. De esta forma se combate el spam. Este sitio web utiliza las siguientes cookies de terceros: - Google AdManager y AdSense: Utiliza cookies para mejorar la publicidad. Entre otros fines, suelen utilizarse para segmentarla según el contenido que sea relevante para los usuarios o su ubicación, mejorar los informes de rendimiento de las campañas y evitar mostrar anuncios que los usuarios ya hayan visto. Las cookies no contienen información personal identificable. Consulta cómo utiliza Google la información de sitios web o aplicaciones. y cómo bloquear determinados anuncios. - Google Analytics: Almacena cookies para poder elaborar estadísticas sobre el tráfico y volumen de visitas de esta web. Al utilizar este sitio web está consintiendo el tratamiento de información acerca de usted por Google. Por tanto, el ejercicio de cualquier derecho en este sentido deberá hacerlo comunicando directamente con Google. - Redes sociales: Cada red social utiliza sus propias cookies para que usted pueda pinchar en botones del tipo Me gusta o Compartir.

Cerrar