English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial de Spring Data JPA

La API de Spring Data JPA proporciona la clase JpaTemplate para integrar aplicaciones de Spring con JPA.

JPA (Java Persistence API) es una especificación de Sun utilizada para almacenar de manera persistente objetos en aplicaciones empresariales. Actualmente, se utiliza como sustituto de beans de entidad complejos.

Muchos proveedores ofrecen implementaciones del estándar JPA, como:

Hibernate Toplink iBatis OpenJPA, etc.

Ventajas de Spring JpaTemplate

No es necesario escribir código de inicio y finalización para persistir, actualizar, eliminar o buscar objetos, como crear una instancia de Persistence, crear una instancia de EntityManagerFactory, crear una instancia de EntityTransaction, crear una instancia de EntityManager, submitir una instancia de EntityTransaction y cerrar EntityManager.

Por lo tanto, es Ahorró mucho código

En este ejemplo, utilizaremos el modo Hibernate para implementar JPA.

Ejemplo de integración de Spring y JPA

Vamos a ver los pasos sencillos para integrar una aplicación de Spring con JPA:

Crear el archivo Account.java Crear el archivo Account.xml Crear el archivo AccountDao.java Crear el archivo persistence.xml Crear el archivo applicationContext.xml Crear el archivo AccountsClient.java

En este ejemplo, integraremos la aplicación de suspensión con spring. Vamos a ver un ejemplo de jpa con spring. Estructura de directorio

1、Account.java

Esta es una clase POJO simple.

package com.w3codebox;
public class Account {
	private int accountNumber;
	private String owner;
	private double balance;
        //no-arg and parameterized constructor
        //getters and setters
}
2、Account.xml

Este archivo de mapeo contiene toda la información de las clases persistentes.

<entity-mappings version="1.0" 
		xmlns="http://java.sun.com/xml/ns/persistence/orm" 
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance 
		xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm 
		http://java.sun.com/xml/ns/persistence/orm_1_0.xsd ">
	<entity class="com.w3codebox.Account">
		<table name="account100"></table>
		<attributes>
			<id name="accountNumber">
				<column name="accountnumber">/>
			</id>
			<basic name="owner">
				<column name="owner">/>
			</basic>
			<basic name="balance">
				<column name="balance">/>
			</basic>
		</attributes>
	</entity>
</entity-mappings>

3、AccountDao.java

package com.w3codebox;
import java.util.List;
import org.springframework.orm.jpa.JpaTemplate;
import org.springframework.transaction.annotation.Transactional;
@Transactional
public class AccountsDao{
	JpaTemplate template;
	public void setTemplate(JpaTemplate template) {
		this.template = template;
	}
	public void createAccount(int accountNumber, String owner, double balance) {
		Account account = new Account(accountNumber,owner,balance);
		template.persist(account);
	}
	public void updateBalance(int accountNumber,double newBalance){
		Account account = template.find(Account.class, accountNumber);
		if(account != null){
			account.setBalance(newBalance);
		}
		template.merge(account);
	}
	public void deleteAccount(int accountNumber){
		Account account = template.find(Account.class, accountNumber);
		if(account != null)
			template.remove(account);
	}
	public List<Account> getAllAccounts(){
		List<Account> accounts =template.find("select acc from Account acc");
		return accounts;
	}
}

4、persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
    
	<persistence-unit name="ForAccountsDB">
		<mapping-file>com/w3codebox/Account.xml</mapping-file>
		<class>com.w3codebox.Account</class>
	</persistence-unit>
</persistence>

5、applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance 
	xmlns:tx="http://www.springframework.org/schema/tx" 
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
	http://www.springframework.org/schema/tx
	http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
 	 <tx:annotation-driven transaction-manager="jpaTxnManagerBean" proxy-target-class="true"/>
	 <bean id="dataSourceBean" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
		<property name="url" value="jdbc:oracle:thin:@localhost:<1521:xe"></property>
		<property name="username" value="system"></property>
		<property name="password" value="oracle"></property>
	</bean>
	 	 
 	  <bean id="hbAdapterBean" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
	 	<property name="showSql" value="true"></property>
	 	<property name="generateDdl" value="true"></property>
	 	<property name="databasePlatform" value="org.hibernate.dialect.OracleDialect"></property>
	 </bean>
	<bean id="emfBean" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
	 	<property name="dataSource" ref="dataSourceBean"></property>
	 	<property name="jpaVendorAdapter" ref="hbAdapterBean"></property>
	 </bean>
	 
	 <bean id="jpaTemplateBean" class="org.springframework.orm.jpa.JpaTemplate">
 	 	<property name="entityManagerFactory" ref="emfBean"></property>
 	 </bean>
 	 
 	 <bean id="accountsDaoBean" class="com.w3codebox.AccountsDao">
 	 	<property name="template" ref="jpaTemplateBean"></property>
 	 </bean>
 	  <bean id="jpaTxnManagerBean" class="org.springframework.orm.jpa.JpaTransactionManager">
		<property name="entityManagerFactory" ref="emfBean"></property>
	</bean>
 	 	
</beans>

generateDdl La propiedad creará automáticamente la tabla.

showSql La propiedad se mostrará en la consola de control la consulta SQL.

6、Accountsclient.java

package com.w3codebox;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class AccountsClient{
public static void main(String[] args){
 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
 AccountsDao accountsDao = context.getBean("accountsDaoBean", AccountsDao.class);
 accountsDao.createAccount(15, "Jai Kumar", 41000);
 accountsDao.createAccount(20, "Rishi ", 35000);
 System.out.println("Cuentas creadas");
 //accountsDao.updateBalance(20, 50000);
 //System.out.println("Saldo de cuenta actualizado");
 /*List<Account> accounts = accountsDao.getAllAccounts();
 for (int i = 0; i < accounts.size(); i++) {
   Account acc = accounts.get(i);
   System.out.println(acc.getAccountNumber()) + " : " + acc.getOwner() + " ( +  + )
 }*/
  //accountsDao.deleteAccount(111);
  //System.out.println("Cuenta eliminada");
 }
}

Salida

Hibernate: insert into account100 (saldo, propietario, número de cuenta) valores (?, ?, ?)
Hibernate: insert into account100 (saldo, propietario, número de cuenta) valores (?, ?, ?)
Cuentas creadas