jpa学习和jpa与spring整合(二)

经过上一篇介绍了jpa的用法和原理:这一篇开始整合jpa与spring整合。

一.配置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:context="http://www.springframework.org/schema/context"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
    
   <context:component-scan base-package="com.atguigu.jpa">context:component-scan>
   
   <context:property-placeholder location="classpath:db.properties"/>
   <bean id="dataSource"
      class="com.mchange.v2.c3p0.ComboPooledDataSource">
      <property name="user" value="${jdbc.user}">property>
      <property name="password" value="${jdbc.password}">property>
      <property name="driverClass" value="${jdbc.driverClass}">property>
      <property name="jdbcUrl" value="${jdbc.jdbcUrl}">property>   
      
   bean>
  
   <bean id="entityManagerFactory"
      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
      <property name="dataSource" ref="dataSource">property>
      
      <property name="jpaVendorAdapter">
         <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">bean>
      property>
      
      <property name="packagesToScan" value="com.atguigu.jpa.spring.entities">property>
      
      <property name="jpaProperties">
         <props>
            <prop key="hibernate.show_sql">trueprop>
            <prop key="hibernate.format_sql">trueprop>
            <prop key="hibernate.hbm2ddl.auto">updateprop>
         props>
      property>
   bean>
    
   <bean id="transactionManager"
      class="org.springframework.orm.jpa.JpaTransactionManager">
      <property name="entityManagerFactory" ref="entityManagerFactory">property>   
   bean>
   
   
   <tx:annotation-driven transaction-manager="transactionManager"/>

beans>
二.配置数据库连接db.properties
jdbc.user=root
jdbc.password=1230
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql:///jpa
三.配置架包 jpa学习和jpa与spring整合(二)_第1张图片

四.PersonDao

package com.atguigu.jpa.dao;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
import com.atguigu.jpa.spring.entities.Person;
@Repository
public class PersonDao {
   //如何获取到和当前事务关联的 EntityManager 对象呢 ?
   //通过 @PersistenceContext 注解来标记成员变量!
   @PersistenceContext
   private EntityManager entityManager;
   public void save(Person person){
      entityManager.persist(person);
   }
}

五.service

package com.atguigu.jpa.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.atguigu.jpa.dao.PersonDao;
import com.atguigu.jpa.spring.entities.Person;
@Service
public class PersonService {
   @Autowired
   private PersonDao personDao;
   @Transactional
   public void savePersons(Person p1, Person p2){
      personDao.save(p1);
      int i = 10 / 0;
      personDao.save(p2);
   }
}
六.model

package com.atguigu.jpa.spring.entities;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Table(name="JPA_PERSONS")
@Entity
public class Person {
   private Integer id;
   private String lastName;
   private String email;
   private int age;
   @GeneratedValue
   @Id
   public Integer getId() {
      return id;
   }
   public void setId(Integer id) {
      this.id = id;
   }
   @Column(name="LAST_NAME")
   public String getLastName() {
      return lastName;
   }
   public void setLastName(String lastName) {
      this.lastName = lastName;
   }
   public String getEmail() {
      return email;
   }
   public void setEmail(String email) {
      this.email = email;
   }
   public int getAge() {
      return age;
   }
   public void setAge(int age) {
      this.age = age;
   }
}

七.test

package com.atguigu.jpa.spring;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.atguigu.jpa.service.PersonService;
import com.atguigu.jpa.spring.entities.Person;
public class JPATest {
   private ApplicationContext ctx = null;
   private PersonService personService = null;
   {
      ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
      personService = ctx.getBean(PersonService.class);
   }
   @Test
   public void testPersonService(){
      Person p1 = new Person();
      p1.setAge(11);
      p1.setEmail("[email protected]");
      p1.setLastName("AA");
      
      Person p2 = new Person();
      p2.setAge(12);
      p2.setEmail("[email protected]");
      p2.setLastName("BB");
      System.out.println(personService.getClass().getName());
      personService.savePersons(p1, p2);
   }
   @Test
   public void testDataSource() throws SQLException {
      DataSource dataSource = ctx.getBean(DataSource.class);
      System.out.println(dataSource.getConnection());
   }
}

后续会不断完善


你可能感兴趣的:(spring框架)