English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
يقدم API Spring Data JPA فئة JpaTemplate لدمج تطبيق Spring مع JPA.
JPA (Java Persistence API) هو معيار Sun المستخدم لتحفظ الكائنات في تطبيقات الشركات. حاليًا، يتم استخدامه كبديل للبروتينات المعقدة.
العديد من المزودين يقدمون تنفيذًا للمعيار JPA، مثل
Hibernate Toplink iBatis OpenJPA وما إلى ذلك
لا تحتاج إلى كتابة كود قبل أو بعد التشغيل للحفظ، تحديث، حذف أو البحث عن الكائنات، مثل إنشاء مثيل من Persistence، إنشاء مثيل من EntityManagerFactory، إنشاء مثيل من EntityTransaction، إنشاء مثيل من EntityManager، تقديم مثيل من EntityTransaction وإغلاق EntityManager.
لذلك، فهو لقد حفظنا الكثير من الكود。
في هذا المثال، سنستخدم نمط Hibernate لتحقيق 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 }
هذا الملف يحتوي على جميع معلومات الكائنات المتركبة.
<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 (?, ?, ?) مستخدمون تم إنشاؤهم