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

Tutorial Spring Data JPA

L'API Spring Data JPA fornisce la classe JpaTemplate per integrare l'applicazione Spring con JPA.

JPA (Java Persistence API) è una specifica di Sun utilizzata per memorizzare permanentemente oggetti in applicazioni aziendali. Attualmente, viene utilizzato come sostituto per bean entity complessi.

Molti fornitori offrono implementazioni della specifica JPA, ad esempio:

Hibernate Toplink iBatis OpenJPA e altri.

Vantaggi di JpaTemplate di Spring

Non è necessario scrivere codice anteriore e successivo per persistere, aggiornare, eliminare o cercare oggetti, ad esempio creare un'istanza di Persistence, creare un'istanza di EntityManagerFactory, creare un'istanza di EntityTransaction, creare un'istanza di EntityManager, committere un'istanza di EntityTransaction e chiudere EntityManager.

Pertanto, è Ha risparmiato molto codice

In questo esempio, utilizzeremo il modello Hibernate per implementare JPA.

Esempio di integrazione Spring e JPA

Ecco i semplici passaggi per integrare l'applicazione Spring con JPA:

Creare il file Account.java Creare il file Account.xml Creare il file AccountDao.java Creare il file persistence.xml Creare il file applicationContext.xml Creare il file AccountsClient.java

In questo esempio, integreremo l'applicazione Hibernate con Spring. Vediamo un esempio di jpa con Spring Struttura del catalogo

1、Account.java

Questa è una semplice classe POJO.

package com.w3codebox;
public class Account {
	private int accountNumber;
	private String owner;
	private double balance;
        //costruttore senza argomenti e parametrizzato
        //getter e setter
}
2、Account.xml

Questa mappatura file contiene tutte le informazioni delle classi persistenti.

<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 Le proprietà creeranno automaticamente la tabella.

showSql Le proprietà verranno visualizzate sul terminale le query 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("Conti creati");
 //accountsDao.updateBalance(20, 50000);
 //System.out.println("Account bilancio aggiornato");
 /*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() + " (" + acc.getBalance() + ")");
 */
  //accountsDao.deleteAccount(111);
  //System.out.println("Account cancellato");
 }
}

Output

Hibernate: insert into account100 (balance, owner, accountnumber) values (?, ?, ?)
Hibernate: insert into account100 (balance, owner, accountnumber) values (?, ?, ?)
Conti creati