Underc0de

Programación General => Java => Mensaje iniciado por: Gus Garsaky en Abril 10, 2015, 09:48:35 AM

Título: [Tutorial] JPA 2.1 - Parte I
Publicado por: Gus Garsaky en Abril 10, 2015, 09:48:35 AM
TUTORIAL JPA 2.1



El presente tutorial tiene como finalidad mostrar los aspectos básicos de la especificación de Java JPA (API de Persistencia de Java por sus siglas en inglés). Se cubrirán los aspectos más básicos de ésta API para que el lector se dé cuenta del potencial que nos ofrece y que se puede aplicar en nuestros proyectos. Así mismo,




¿QUÉ ES JPA?


Como en todo proceso de aprendizaje, primero debes saber qué es exactamente el objeto de nuestro estudio. JPA como ya dijimos es el API para la persistencia en Java, pero, ¿qué es en concreto? Bien, JPA es un ORM, aunque no propiamente. Explicaremos esto en detalle a continuación.

La Java Community Process (JCP), es la encargada de las especificaciones en Java. ¿Qué quiero decir con especificaciones? Pues, una especificación no es más que un estándar. La JCP propone un estándar y si por mayoría de votos se acepta la proposición, se designa un equipo experto para que trabaje en ella. Aquí el equipo se encarga de definir la estructura de la especificación, sus características y forma de trabajar. Pero no podemos empezar a trabajar con una especificación si no tiene una implementación. Una implementación es una representación real de dicha especificación. Es como en el mismo lenguaje, una interface vendría a ser la especificación y una clase que implemente dicha interface vendría a ser la implementación o representación. Así mismo, la JCP puede o no realizar la implementación de una especificación, como lo hizo con Servlet, JAXB, JMS, JAAS, y algunos otros.

Comprendido lo anteriormente explicado, se procede a listar las mejores implementaciones de JPA:

• Hibernate
• EclipseLink
• MyBatis

Hibernate y MyBatis se pueden usar nativamente, es decir, sin usar a JPA como interfaz o también con JPA. En éste tutorial se usará Hibernate por ser el más adoptado por los desarrolladores.




PREPARANDO NUESTRO ENTORNO DE TRABAJO


Primero que todo, vamos a disponer del siguiente material:

• JDK 8 (http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
• Eclipse Luna (http://eclipse.org/downloads)
• Hibernate 4.3.8 (http://sourceforge.net/projects/hibernate/files/hibernate4/4.3.8.Final/hibernate-release-4.3.8.Final.zip/download) (opcional, porque usaremos Maven).
• MySQL 5.6 (http://www.filehippo.com/es/download_mysql/59945/)
• MySQL JDBC (http://dev.mysql.com/downloads/connector/j/) (opcional, usaremos Maven).
• MySQL Workbench 6.2.5 (http://dev.mysql.com/downloads/workbench/)

Instalación de MySQL como servicio

Nos dirigimos a "C:\Program Files\MySQL\MySQL Server 5.6" y renombramos el archivo "my-default.ini" a "my.ini". Lo editamos y al final agregamos la línea:

PERFORMANCE_SCHEMA=0

Ahora, abrimos la terminal como Administrador y nos dirigimos hacia "bin". Aquí ejecutaremos el comando:

mysqld –install

Y ya tenemos MySQL instalado como servicio. Si no está corriendo lo iniciamos.



CREACIÓN DE LA BASE DE DATOS



Creación de la base de datos y la tabla Employees

Abrimos MySQL Workbench e iniciamos sesión. En el editor SQL escribimos el siguiente código para crear nuestra base de datos "jpa2_tuto" y nuestra primera tabla "employees":

(http://i.imgur.com/AjS9wWJ.png)
Título: Re:[Tutorial] JPA 2.1 - Parte I
Publicado por: Gus Garsaky en Abril 10, 2015, 09:49:19 AM


CREACIÓN DEL PROYECTO



Vamos a crear nuestro proyecto en Eclipse. El proyecto será maven para que gestione nuestras dependencias y no tener que preocuparnos por bajar las bibliotecas/librerías. Vamos al menú "File" -> "New" -> "Maven Project". Tildamos la opción create a simple project:

(http://i.imgur.com/yGZNhE3.png?1)

Clic en Next. A continuación llenamos la información de nuestro proyecto, de tal modo que quede así:

(http://i.imgur.com/YynBXCn.png?1)

Click en finish y ya tenemos listo nuestro proyecto.



AGREGANDO DEPENDENCIAS AL PROYECTO Y CONFIGURACIÓN



Abrimos el archivo pom.xml, que se encuentra en la raíz del proyecto. Éste archivo es el encargado de gestionar las dependencias del proyecto. Si hemos visto PHP, se puede comparar a Composer, PEAR, o RubyGems de Ruby. En éste archivo debemos de especificar las dependencias que requerirá el proyecto y algunas configuraciones de ser necesario. Editamos su contenido, de tal modo que quede así:

Código (xml) [Seleccionar]
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.company</groupId>
  <artifactId>jpa2-tuto</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>JPA2-Tuto</name>
  <description>Tutorial de JPA 2</description>
 
  <properties>
  <maven_compiler_source>1.8</maven_compiler_source>
  <maven_compiler_target>1.8</maven_compiler_target>
  </properties>
 
  <build>
  <plugins>
  <plugin>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.1</version>
  <configuration>
  <source>1.8</source>
  <target>1.8</target>
  </configuration>
  </plugin>
  </plugins>
  </build>
 
  <dependencies>
  <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.8.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>5.1.3.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate.common</groupId>
            <artifactId>hibernate-commons-annotations</artifactId>
            <version>4.0.5.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.0-api</artifactId>
            <version>1.0.1.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>4.3.8.Final</version>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.1.0.Final</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.34</version>
        </dependency>
  </dependencies>
 
</project>


Primero especificamos que la versión de Java será la 1.8 porque por defecto un proyecto Maven crea una proyecto para la versión 1.5. Más abajo especificamos las dependencias de nuestro proyecto*, es decir, frameworks, bibliotecas/librerías, etc. Como se puede observar, la gran mayoría pertenece a Hibernate, del que ya hablamos anteriormente y al final, agregamos la dependencia MySQL jdbc.
Para actualizar el proyecto Maven con las nuevas dependencias y configuraciones, le damos clic derecho > Maven > Update Project...
Ya tenemos nuestro proyecto con todas las dependencias que necesitamos. Ahora solo queda empezar a programar.







* Para saber que versión o que artifactId poner, debemos ir al repositorio Maven y buscar las dependencias que queramos. Cada dependencia tendrá su código para solo copiar y pegar en nuestro pom.xml



PRIMER CONTACTO CON JPA



Primero, crearemos nuestro archivo persistence.xml, el cual contendrá toda la información sobre nuestra conexión a la base de datos. Creamos un folder dentro de src/main/resources llamado META-INF y dentro de éste folder creamos un fichero xml llamado persistence.xml. Éste fichero tendrá el siguiente aspecto:

Código (xml) [Seleccionar]
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
             http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
             version="2.1">
             
             <persistence-unit name="JPA2-tuto" transaction-type="RESOURCE_LOCAL">
              <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
             
              <properties>
              <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
              <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpa2_tuto"/>
              <property name="javax.persistence.jdbc.user" value="root"/>
              <property name="javax.persistence.jdbc.password" value="toor"/>
              <property name="org.hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
              <property name="show_sql" value="true"/>
              <property name="format_sql" value="true"/>
              <property name="hbm2ddl.auto" value="auto"/>
              </properties>
             </persistence-unit>
             
</persistence>


Éste fichero especifica la configuración de nuestra conexión con JPA. Aquí describimos el proveedor de la implementación de JPA, el driver del SGBD, el url, el usuario y contraseña, el dialecto, etc. A continuación se describen algunas palabras clave de persistence.xml: