这里以Maven举例 先发图再发Maven以及配置文件的文字信息(方便复制粘贴); Oracle11g 数据库 jar包在Oracle数据库安装的lib目录下,这里不做具体介绍
Spring整合Jpa配置文件: 一定要仔细,仔细再仔细;
第二步 根据以上配置的信息所指向的包创建映射关系实体类
第三步: 编写DAO接口(注意是接口 Mybatis用过的都明白)
第四步: 单元测试 自动创建表和插入数据
第5步,测试OK Oracle自动创建表并添加数据;
pom文件所需要的依赖
<properties>
<spring.version>4.2.4.RELEASE</spring.version>
<hibernate.version>5.0.7.Final</hibernate.version>
<slf4j.version>1.6.6</slf4j.version>
<log4j.version>1.2.12</log4j.version>
<c3p0.version>0.9.1.2</c3p0.version>
<mysql.version>5.1.6</mysql.version>
</properties>
<dependencies>
<!-- junit单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
<!-- spring beg -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.6.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</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-context-support</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-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring end -->
<!-- hibernate beg -->
<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>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.1.Final</version>
</dependency>
<!-- hibernate end -->
<!-- c3p0 beg -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>${c3p0.version}</version>
</dependency>
<!-- c3p0 end -->
<!-- log end -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log end -->
<!-- https://mvnrepository.com/artifact/oracle/ojdbc6 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.9.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<!-- el beg 使用spring data jpa 必须引入 -->
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>2.2.4</version>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.el</artifactId>
<version>2.2.4</version>
</dependency>
<!-- el end -->
</dependencies>
applicationContext.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<context:property-placeholder location="oracleDataConnection.properties"></context:property-placeholder>
<!--1,配置DataSource (这里测试为Oracle)数据库连接池-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${oracleDriver}"></property>
<property name="jdbcUrl" value="${oracleUrl}"></property>
<property name="user" value="${oracleUser}"></property>
<property name="password" value="${oraclePassword}"></property>
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<!--配置数据库连接池-->
<property name="dataSource" ref="dataSource"/>
<!--配置扫描包实体类-->
<property name="packagesToScan" value="com.out.entity"/>
<!--注入Hibernate对Jpa的实现-->
<property name="persistenceProvider" ref="hibernateId" />
<!--Jpa的供应商适配器-->
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" >
<!--在适配器中配置对应的一些连接信息 是否自动创建(如果没有必须指定否则就报错了 ) true就是原生配置(update)-->
<property name="generateDdl" value="true"/>
<!--选型数据库,看源码都是有枚举的,MySQL,SQLService都是有的-->
<property name="database" value="ORACLE"/>
<!--是否显示方言-->
<property name="showSql" value="true"/>
<!--指定数据库平台-->
<property name="databasePlatform" value="org.hibernate.dialect.Oracle10gDialect"></property>
</bean>
</property>
<!--配置JPA方言信息,源码也是有的,Mysql的Oracle的都是可见的-->
<property name="jpaDialect" >
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"></bean>
</property>
</bean>
<!--这里声明Hibernate 可以直接配置到 persistenceProvider 中,但是为了清楚没有这么做-->
<bean id="hibernateId" class="org.hibernate.jpa.HibernatePersistenceProvider"></bean>
<!--3,配置事务管理器 事务管理器是不同的此时注意-->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<!--开启声明事务,当然你可以使用指定的切面进行控制事务-->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!--开始整合操作 这里的扫描包是扫描DAO层,不需要写实现类就可以完成操作数据库操作-->
<jpa:repositories base-package="com.out.dao"
transaction-manager-ref="transactionManager"
entity-manager-factory-ref="entityManagerFactory" />
<!--装配其它类容器-->
<context:component-scan base-package="com.out"/>
</beans>
Entity映射类:
package com.out.entity;
import javax.persistence.*;
/**
-
@author misterWei
-
@mailbox @gmail.com
*/
//声明映射关系
@Entity
@Table(name = “s_student”)
public class Student {
//配置主键 以及其它字段名称
@Id//主键生成策略
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = “s_id” )
private Integer sid;
@Column(name = “s_name”,length = 20)
private String sname;
@Column(name = “s_gender”,length = 1)
private Integer gender;
@Column(name=“s_age”,length = 3)
private Integer age;public String getGrade() {
return grade;
}public void setGrade(String grade) {
this.grade = grade;
}@Column(name=“s_grade”,length = 10)
private String grade;public Integer getSid() {
return sid;
}public void setSid(Integer sid) {
this.sid = sid;
}public String getSname() {
return sname;
}public void setSname(String sname) {
this.sname = sname;
}public Integer getAge() {
return age;
}public void setAge(Integer age) {
this.age = age;
}public Integer getGender() {
return gender;
}public void setGender(Integer gender) {
this.gender = gender;
}@Override
public String toString() {
return “Person{” +
“sid=” + sid +
“, sname=’” + sname + ‘’’ +
“, age=” + age +
“, gender=” + gender +
‘}’;
}
}
DAO接口
package com.out.dao;
import com.out.entity.Student;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/**
*
*/
//此时这个Dao层就是一个接口只需要继承2个接口就使用API
//JpaRepository 用来进行基本的CRUD <实体类,对应的主键类型>
//JpaSpecificationExecutor用来进行复杂的查询分页操作等<实体类>
public interface StudentDao extends
JpaRepository<Student,Long>,JpaSpecificationExecutor {
}
单元测试:
package com.out;
import com.out.dao.StudentDao;
import com.out.entity.Student;
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;
/**
*/
//进行简单的单元测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = “classpath:applicationContext.xml”)
public class JavaConnectionOrcleTest {
@Autowired
private StudentDao studentDao;
@Test
public void insertOne(){
Student student = new Student();
student.setSname(“小明同学”);
student.setAge(18);
student.setGender(1);
student.setGrade(“三年级二班”);
studentDao.save(student);
}
}