Conectar Java con Mysql

Hay muchas formas en que podemos conectar Java con Mysql y en este tutorial exploraremos algunas opciones para ver cómo lograrlo. Comenzaremos analizando posiblemente las opciones más populares que utilizan JDBC e Hibernate. Luego, también veremos algunas bibliotecas externas, incluidas MyBatis, Apache Cayenne y Spring Data. A lo largo del camino, proporcionaremos una serie de ejemplos prácticos.

Condiciones

Antes de continuar daremos por hecho que tenemos el servidor de Mysql instalado, pero si no es así te recomendamos revisar nuestro tutorial de cómo instalar Mysql en Ubuntu https://tenocode.com/instalar-mysql-en-ubuntu-22/

Crearemos una tabla para efectos de nuestro demo

También necesitaremos el conector de java o driver mysql-connector-java, esta pieza hace el enlace entre nuestro servidor de Mysql y nuestra aplicación. Usaremos Maven para este ejemplo. OJO que las versiones de las librerías pueden variar en el tiempo.

Conectando con JDBC

Para la mayoría de las conexiónes a base de datos, se necesitan algunas propiedades que listaremos a continuación.

Connection URL: Generalmente cuando conectamos con JDBC, necesitaremos una url de conexión, esta url no es más que un string, en el cual proporcionamos cierta información de nuestro servidor Mysql para poder acceder a él

Un ejemplo real sería algo como:

Driver class: el nombre de la clase que utilizaremos para la conexión. En nuestro caso es el controlador MySQL: com.mysql.cj.jdbc.Driver

Username and password: Credenciales necesarias para acceder al servidor Mysql seguramente.

Ejemplo de conexión JDBC

Código para conectarse y hacer una consulta a la tabla person

Como podemos ver, dentro del try hacemos un loop para extraer la data de la consulta (ID, FIRST_NAME, LAST_NAME).

Conectando con ORMs (es lo que recomiendo)

En esta sección usaremos Hibernate, para manejar las conexiones y consulta a nuestra base de datos Mysql. Necesitamos agregar a nuestro pom las dependencias hibernate-core 

Hibernate requiere que creemos una entidad por tabla, que son las entidades? aquí te lo muestro.

El código anterior es una nueva clase con la anotación Entity. Esta clase es una representación en java de la tabla Person

Otro aspecto esencial es crear el archivo de recursos de Hibernate, normalmente llamado hibernate.cfg.xml, donde definiremos la información de configuración:

Esta es solo una forma de configuración. Hibernate nos ofrece varias alternativas de configurar nuestra conexión a la base de datos, si necesitas ahondar más aún te dejo el link https://docs.jboss.org/hibernate/orm/6.4/quickstart/html_single/

El framework utiliza esta propiedad para convertir correctamente las declaraciones del lenguaje de consulta Hibernate (HQL) al SQL apropiado para nuestra base de datos determinada. Hibernate viene con más de 40 dialectos SQL. Como nos centramos en MySQL en este artículo, nos quedaremos con el dialecto MySQLDialect. Puedes revisar acá otros dialectos https://docs.jboss.org/hibernate/orm/6.4/dialect/dialect.html

Finalmente, Hibernate también necesita conocer el nombre completo de la clase a través de la etiqueta de mapeo. Una vez que completemos la configuración, usaremos la clase SessionFactory, que es la clase responsable de crear y agrupar conexiones JDBC.

Normalmente, esto sólo necesita configurarse una vez para una aplicación:

Ahora que tenemos todo configurados podemos correr querys a nuestras tablas, ejemplo si quisieramos traer los datos de la tabla persona

Como se comentó anteriormente, también es posible crear la configuración de la conexión a la base de datos con un archivo java en vez de un xml. Para ello tambien utilizaremos un archivo de propiedades properties.

Archivo de propiedades, generalmente debe ir en la carpeta resources, lo llamaremos application.properties (puede tener cualquier nombre).

Aparte debes tener una clase que lea estas propiedades, tal como:

El archivo Java de conexión lo llamaremos HibernateUtil.java

Tambien puedes crear una query nativa:

MyBatis

Antes que todo dejo el link github del proyecto: https://github.com/mybatis/mybatis-3

MyBatis se introdujo en 2010 y es un framework de mapeo SQL con la simplicidad como su punto fuerte. Para usarlo, necesitamos agregar la dependencia mybatis:

Suponiendo que reutilizamos la clase Persona anterior sin anotaciones, podemos proceder a crear una interfaz PersonMapper:

El siguiente paso tiene que ver con la configuración de MyBatis:

Creamos un objeto de Configuración que es un contenedor de configuraciones.

Luego podemos usar el objeto Configuración, que normalmente se configura una vez para que una aplicación cree una SqlSessionFactory:

Apache Cayenne

Apache Cayenne es un marco de persistencia cuyo primer lanzamiento se remonta a 2002. Para obtener más información al respecto, sugerimos leer nuestra introducción a Apache Cayenne.

Como de costumbre, agreguemos la dependencia Maven del servidor cayenne:

Nos centraremos específicamente en la configuración de conexión MySQL. En este caso, configuraremos cayenne-project.xml:

Después de la generación automática de datamap.map.xml y la clase Person en forma de CayenneDataObject, podemos ejecutar algunas consultas.

Por ejemplo, continuaremos como antes con seleccionar todo:

Connecting Using Spring Data

Spring Data es un modelo de programación basado en Spring para el acceso a datos. Técnicamente, Spring Data es un proyecto general que contiene muchos subproyectos específicos de una base de datos determinada.

Veamos cómo usar dos de estos proyectos para conectarnos a una base de datos MySQL.

Spring Data / JPA

Spring Data JPA es un marco robusto que ayuda a reducir el código repetitivo y proporciona un mecanismo para implementar operaciones CRUD básicas a través de una de varias interfaces de repositorio predefinidas. Además de esto, tiene muchas otras funciones útiles.

El artefacto spring-data-jpa se puede encontrar en Maven Central:

Continuaremos usando la clase Persona. El siguiente paso es configurar JPA usando anotaciones:

Para permitir que Spring Data implemente las operaciones CRUD, tenemos que crear una interfaz que extienda la interfaz CrudRepository:

Y finalmente, veamos un ejemplo de seleccionar todo con Spring Data:

Spring Data / JDBC

Spring Data JDBC es una implementación limitada de la familia Spring Data, cuyo objetivo principal es permitir un acceso sencillo a bases de datos relacionales.

Por esta razón, no proporciona funciones como almacenamiento en caché, dirty tracking, lazy loading y muchas otras funciones JPA.

Esta vez la dependencia de Maven que necesitamos es spring-data-jdbc:

La configuración es más ligera en comparación con la que usamos en la sección anterior para Spring Data JPA:

En el caso de Spring Data JDBC, tenemos que definir una nueva clase Person o modificar la existente para agregar algunas anotaciones específicas de Spring.

Esto se debe a que Spring Data JDBC se encargará directamente del mapeo de entidades en lugar de Hibernate:

Con Spring Data JDBC, también podemos usar la interfaz CrudRepository. Por lo tanto, la declaración será idéntica a la que escribimos anteriormente en el ejemplo de Spring Data JPA.

Entradas relacionadas

Desplegar una aplicación en directorio raíz de tomcat y redireccionarla al puerto 80

Cuando desarrollas un aplicativo .war y lo deployas en un servidor tomcat, generalmente la ruta en donde se alojará la aplicación será localhost:8080/tuapp, lo que haremos es…

Jar como servicio en Linux

¿Te has preguntado alguna vez cómo convertir tu aplicación Java empaquetada en un archivo JAR como servicio en Linux? Con Systemd, el administrador de servicios de Linux,…

Consumir mensaje RabbitMQ con Java 17

En el complejo universo de la mensajería y la integración de sistemas, RabbitMQ destaca como una herramienta robusta que facilita la comunicación eficiente entre aplicaciones distribuidas. Este…

Instalar Mysql en Ubuntu 22

MySQL es un sistema de gestión de bases de datos ampliamente utilizado que proporciona una plataforma robusta y confiable para almacenar y recuperar datos. En este post…

MongoDB con Mongosh

En el mundo de las bases de datos NoSQL, MongoDB destaca como una opción potente y flexible.