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

Tutorial do Spring Data JPA

A API do Spring Data JPA fornece a classe JpaTemplate para integrar o aplicativo Spring com o JPA.

O JPA (Java Persistence API) é uma especificação da Sun para armazenamento persistente de objetos em aplicações empresariais. Atualmente, ele é usado como substituto para beans de entidade complexos.

Muitos fornecedores oferecem implementações do padrão JPA, como:

Hibernate Toplink iBatis OpenJPA, etc.

Vantagens do JpaTemplate do Spring

Você não precisa escrever código de antes e depois para persistir, atualizar, deletar ou buscar objetos, como criar uma instância de Persistence, criar uma instância de EntityManagerFactory, criar uma instância de EntityTransaction, criar uma instância de EntityManager, submeter uma instância de EntityTransaction e fechar o EntityManager.

Portanto, é Economizou muito código

Neste exemplo, usaremos o Hibernate para implementar o JPA.

Exemplo de integração Spring e JPA

Vamos ver os passos simples para integrar o aplicativo Spring com o JPA:

Criar o arquivo Account.java Criar o arquivo Account.xml Criar o arquivo AccountDao.java Criar o arquivo persistence.xml Criar o arquivo applicationContext.xml Criar o arquivo AccountsClient.java

Neste exemplo, vamos integrar a aplicação de sono com o spring. Vamos ver um exemplo de jpa com spring. Estrutura de diretórios

1、Account.java

Esta é uma classe POJO simples.

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 arquivo de mapeamento contém todas as informações das classes 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 A propriedade criará automaticamente a tabela.

showSql A propriedade será exibida no console de controle a 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("Contas criadas");
 //accountsDao.updateBalance(20, 50000);
 //System.out.println("Saldo da conta atualizado");
 /*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("Conta deletada");
 }
}

Saída

Hibernate: insert into account100 (saldo, proprietário, número da conta) valores (?, ?, ?)
Hibernate: insert into account100 (saldo, proprietário, número da conta) valores (?, ?, ?)
Contas criadas