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>
   <!-- 配置 C3P0 数据源 这里用的是C3P0数据源-->
   <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>
  <!-- 配置 EntityManagerFactory -->
   <bean id="entityManagerFactory"
      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
      <property name="dataSource" ref="dataSource"></property>
      <!-- 配置 JPA 提供商的适配器. 可以通过内部 bean 的方式来配置 -->
      <property name="jpaVendorAdapter">
         <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>
      </property>
      <!-- 配置实体类所在的包 -->
      <property name="packagesToScan" value="com.atguigu.jpa.spring.entities"></property>
      <!-- 配置 JPA 的基本属性. 例如 JPA 实现产品的属性 -->
      <property name="jpaProperties">
         <props>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
         </props>
      </property>
   </bean>
    <!-- 配置 JPA 使用的事务管理器 -->
   <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
三.配置架包

四.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("aa@163.com");
      p1.setLastName("AA");
      
      Person p2 = new Person();
      p2.setAge(12);
      p2.setEmail("bb@163.com");
      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());
   }
}

后续会不断完善


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平凡之路无尽路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值