JPA学习 —— 第二课、spring整合JPA (不完全版 -- 手动控制事务)

这里是使用spring整合JPA,而且是不完全版,纯属是因为测试方便。

如果想看原始的没用spring整合的JPA配置,请去这里: 创建JPA项目

1. 依赖配置

    <!--版本控制 -->
    <properties>
        <mysql.version>5.1.34</mysql.version>
        <spring.version>4.3.0.RELEASE</spring.version>
        <hibernate.version>4.1.0.Final</hibernate.version>
        <querydsl.version>4.1.4</querydsl.version>
        <jackson.version>2.5.4</jackson.version>
    </properties>
    <dependencies>
        <!-- javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <!-- Spring Framework -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- Spring Framework end -->

        <!-- c3p0 start -->
        <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>
        <!-- c3p0 end -->

        <!--hibernate start -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <!--hibernate end -->

        <!--mysql start -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>


        <!--mysql end -->
        <!--test start -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!--test end -->
        <!--common start -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.3.2</version>
        </dependency>
        <!--common end -->
    </dependencies>

2.配置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:jpa="http://www.springframework.org/schema/data/jpa"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">

    <!-- 配置数据源 -->
    <context:property-placeholder location="classpath:jdbc.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>

    <!-- 配置 JPA 的 EntityManagerFactory -->
    <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.ssj.domain"></property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
                <!-- 指定自动生成数据表的策略 -->
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <!-- 执行操作时是否在控制台打印SQL -->
                <prop key="hibernate.show_sql">true</prop>
                <!-- 是否对SQL进行格式化 -->
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                 <!-- 其他配置 -->

            </props>
        </property>
    </bean>
</beans>

1.这里配置了 JPA 的 EntityManagerFactory,用来获取实体管理器EntityManage,EntityManage相当于hibernate的session,其中包含大量的接口用来操控实体实现对数据库的操作。
2.其实spring整合hibernate是将session交给spring容器管理,而spring整合JPA就是将EntityManage交给spring容器管理。

3.创建实体类

package com.ssj.domain;

import java.util.Date;

import javax.persistence.*;

@Entity
@Table(name="employee")
public class Employee {

    @Column(name="ID")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Id
    private Integer Id;

    @Column(name="EMP_NAME")
    private String empName;

    @Column(name="EMP_BIRTH")
    @Temporal(TemporalType.DATE)
    private Date empBirth;


    public Integer getId() {
        return Id;
    }
    public void setId(Integer id) {
        Id = id;
    }
    public String getEmpName() {
        return empName;
    }
    public void setEmpName(String empName) {
        this.empName = empName;
    }

    public Date getEmpBirth() {
        return empBirth;
    }
    public void setEmpBirth(Date empBirth) {
        this.empBirth = empBirth;
    }
    @Override
    public String toString() {
        return "Employee [Id=" + Id + ", empName=" + empName + ", empBirth="
                + empBirth + "]";
    }
}

4.测试类

package com.ssj.test;

import java.util.Date;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.ssj.domain.Employee;

@RunWith(SpringJUnit4ClassRunner.class)  
@ContextConfiguration(locations= "classpath:applicationContext.xml") 
public class Test01 {

    @Autowired
    private EntityManagerFactory entityManagerFactory;

    @Test
    public void test1(){        
         //2. 创建EntityManager
        EntityManager em = entityManagerFactory.createEntityManager();

        //3.开启事务
        EntityTransaction transaction = em.getTransaction();
        transaction.begin();
        Employee emp = new Employee();
        emp.setEmpName("张三");
        emp.setEmpBirth(new Date());

        em.persist(emp);

         //5. 提交事务
        transaction.commit();

        //6. 关闭EntityManager
        em.close();
    }
}

5.运行结果

这里写图片描述
新建了表
这里写图片描述

猜你喜欢

转载自blog.csdn.net/abc997995674/article/details/80212996