English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
La API de Spring Data JPA proporciona la clase JpaTemplate para integrar aplicaciones de Spring con JPA.
JPA (Java Persistence API) es una especificación de Sun utilizada para almacenar de manera persistente objetos en aplicaciones empresariales. Actualmente, se utiliza como sustituto de beans de entidad complejos.
Muchos proveedores ofrecen implementaciones del estándar JPA, como:
Hibernate Toplink iBatis OpenJPA, etc.
No es necesario escribir código de inicio y finalización para persistir, actualizar, eliminar o buscar objetos, como crear una instancia de Persistence, crear una instancia de EntityManagerFactory, crear una instancia de EntityTransaction, crear una instancia de EntityManager, submitir una instancia de EntityTransaction y cerrar EntityManager.
Por lo tanto, es Ahorró mucho código。
En este ejemplo, utilizaremos el modo Hibernate para implementar JPA.
Vamos a ver los pasos sencillos para integrar una aplicación de Spring con JPA:
Crear el archivo Account.java Crear el archivo Account.xml Crear el archivo AccountDao.java Crear el archivo persistence.xml Crear el archivo applicationContext.xml Crear el archivo AccountsClient.java
En este ejemplo, integraremos la aplicación de suspensión con spring. Vamos a ver un ejemplo de jpa con spring. Estructura de directorio。
1、Account.java
Esta es una clase 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 }
Este archivo de mapeo contiene toda la información de las clases 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 La propiedad creará automáticamente la tabla.
showSql La propiedad se mostrará en la consola de control la 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("Cuentas creadas"); //accountsDao.updateBalance(20, 50000); //System.out.println("Saldo de cuenta actualizado"); /*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("Cuenta eliminada"); } }
Salida
Hibernate: insert into account100 (saldo, propietario, número de cuenta) valores (?, ?, ?) Hibernate: insert into account100 (saldo, propietario, número de cuenta) valores (?, ?, ?) Cuentas creadas