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

دليل Spring Data JPA

يقدم API Spring Data JPA فئة JpaTemplate لدمج تطبيق Spring مع JPA.

JPA (Java Persistence API) هو معيار Sun المستخدم لتحفظ الكائنات في تطبيقات الشركات. حاليًا، يتم استخدامه كبديل للبروتينات المعقدة.

العديد من المزودين يقدمون تنفيذًا للمعيار JPA، مثل

Hibernate Toplink iBatis OpenJPA وما إلى ذلك

مزايا JpaTemplate في Spring

لا تحتاج إلى كتابة كود قبل أو بعد التشغيل للحفظ، تحديث، حذف أو البحث عن الكائنات، مثل إنشاء مثيل من Persistence، إنشاء مثيل من EntityManagerFactory، إنشاء مثيل من EntityTransaction، إنشاء مثيل من EntityManager، تقديم مثيل من EntityTransaction وإغلاق EntityManager.

لذلك، فهو لقد حفظنا الكثير من الكود

في هذا المثال، سنستخدم نمط Hibernate لتحقيق JPA.

مثال على تكامل Spring و JPA

دعونا نرى الخطوات البسيطة لتكامل Spring مع JPA:

إنشاء ملف Account.java إنشاء ملف Account.xml إنشاء ملف AccountDao.java إنشاء ملف persistence.xml إنشاء ملف applicationContext.xml إنشاء ملف AccountsClient.java

في هذا المثال، سنقوم بتكامل تطبيق Hibernate مع Spring. دعونا نرى خطوات تكامل مثال JPA مع Spring هيكل الدليل

1、Account.java

هذا فئة POJO بسيطة.

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

هذا الملف يحتوي على جميع معلومات الكائنات المتركبة.

<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 الخصائص ستقوم بإنشاء الجداول تلقائيًا.

showSql الخصائص ستظهر استعلامات 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("Accounts created");
 //accountsDao.updateBalance(20, 50000);
 //System.out.println("Account balance updated");
 /*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 deleted");
 }
}

الإخراج

Hibernate: insert into account100 (balance, owner, accountnumber) values (?, ?, ?)
Hibernate: insert into account100 (balance, owner, accountnumber) values (?, ?, ?)
مستخدمون تم إنشاؤهم