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

Tutoriel Spring Data JPA

L'API Spring Data JPA fournit la classe JpaTemplate pour intégrer une application Spring avec JPA.

JPA (Java Persistence API) est une norme Sun utilisée pour stocker en persistance des objets dans des applications d'entreprise. Actuellement, il est utilisé comme substitute pour des beans d'entité complexes.

De nombreux fournisseurs fournissent des implémentations de la norme JPA, par exemple:

Hibernate Toplink iBatis OpenJPA, etc.

Avantages de JpaTemplate dans Spring

Vous n'avez pas besoin d'écrire de code avant et après pour persister, mettre à jour, supprimer ou rechercher des objets, par exemple créer une instance de Persistence, créer une instance de EntityManagerFactory, créer une instance de EntityTransaction, créer une instance de EntityManager, soumettre une instance de EntityTransaction et fermer EntityManager.

Par conséquent, il Économise beaucoup de code

Dans cet exemple, nous utiliserons Hibernate pour implémenter JPA.

Exemple d'intégration Spring et JPA

Voyons les étapes simples pour intégrer une application Spring avec JPA:

Créer le fichier Account.java Créer le fichier Account.xml Créer le fichier AccountDao.java Créer le fichier persistence.xml Créer le fichier applicationContext.xml Créer le fichier AccountsClient.java

Dans cet exemple, nous allons intégrer l'application dormante avec Spring. regardons un exemple avec Spring JPA. Structure du répertoire

1、Account.java

C'est une classe 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

Ce fichier de mappage contient toutes les informations des classes persistantes.

<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 Les propriétés créeront automatiquement les tables.

showSql Les propriétés seront affichées sur le console de contrôle des requêtes 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("Comptes créés");
 //accountsDao.updateBalance(20, 50000);
 //System.out.println("Solde du compte mis à jour");
 /*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("Compte supprimé");
 }
}

Sortie

Hibernate: insert into account100 (solde, propriétaire, numéro de compte) valeurs (?, ?, ?)
Hibernate: insert into account100 (solde, propriétaire, numéro de compte) valeurs (?, ?, ?)
Comptes créés