Spring Data JPA
Posted 毕业男孩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Data JPA相关的知识,希望对你有一定的参考价值。
一、JPA概述:
JPA的全称是Java Persistence API, 即Java 持久化API,是SUN公司推出的一套基于ORM的规范,内部是由一系列的接口和抽象类构成。JPA通过JDK 5.0注解描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
JPA的优势:标准化、容器级特性的支持、简单方便、查询能力、高级特性
二、JPA与Hibernate的关系:
JPA规范本质上就是一种ORM规范,注意不是ORM框架——因为JPA并未提供ORM实现,它只是制订了一些规范,提供了一些编程的API接口,但具体实现则由服务厂商来提供实现。JPA和Hibernate的关系就像JDBC和JDBC驱动的关系,JPA是规范,Hibernate除了作为ORM框架之外,它也是一种JPA实现。
三、JPA环境搭建:
1、创建一个maven工程,在pom.xml中导入对应的坐标
1 <properties> 2 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 3 <project.hibernate.version>5.0.7.Final</project.hibernate.version> 4 </properties> 5 6 <dependencies> 7 <!-- junit --> 8 <dependency> 9 <groupId>junit</groupId> 10 <artifactId>junit</artifactId> 11 <version>4.12</version> 12 <scope>test</scope> 13 </dependency> 14 15 <!-- hibernate对jpa的支持包 --> 16 <dependency> 17 <groupId>org.hibernate</groupId> 18 <artifactId>hibernate-entitymanager</artifactId> 19 <version>${project.hibernate.version}</version> 20 </dependency> 21 22 <!-- c3p0 --> 23 <dependency> 24 <groupId>org.hibernate</groupId> 25 <artifactId>hibernate-c3p0</artifactId> 26 <version>${project.hibernate.version}</version> 27 </dependency> 28 29 <!-- log日志 --> 30 <dependency> 31 <groupId>log4j</groupId> 32 <artifactId>log4j</artifactId> 33 <version>1.2.17</version> 34 </dependency> 35 36 <!-- mysql and MariaDB --> 37 <dependency> 38 <groupId>mysql</groupId> 39 <artifactId>mysql-connector-java</artifactId> 40 <version>5.1.6</version> 41 </dependency> 42 </dependencies>
2、编写实体类和数据表的映射配置,创建实体类以后,使用对应的注释配置映射关系
@Entity
作用:指定当前类是实体类。
@Table
作用:指定实体类和表之间的对应关系。
属性:
name:指定数据库表的名称
@Id
作用:指定当前字段是主键。
@GeneratedValue
作用:指定主键的生成方式。。
属性:
strategy :指定主键生成策略。
@Column
作用:指定实体类属性和数据库表之间的对应关系
属性:
name:指定数据库表的列名称。
unique:是否唯一
nullable:是否可以为空
inserttable:是否可以插入
updateable:是否可以更新
columnDefinition: 定义建表时创建此列的DDL
secondaryTable: 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字搭建开发环境[重点]
3、配置JPA的核心配置文件
在java工程的src路径下创建一个名为META-INF的文件夹,在此文件夹下创建一个名为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_2_0.xsd" version="2.0"> <!--配置持久化单元 name:持久化单元名称 transaction-type:事务类型 RESOURCE_LOCAL:本地事务管理 JTA:分布式事务管理 --> <persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL"> <!--配置JPA规范的服务提供商 --> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <properties> <!-- 数据库驱动 --> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> <!-- 数据库地址 --> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/jpa" /> <!-- 数据库用户名 --> <property name="javax.persistence.jdbc.user" value="root" /> <!-- 数据库密码 --> <property name="javax.persistence.jdbc.password" value="111111" /> <!--jpa提供者的可选配置:我们的JPA规范的提供者为hibernate,所以jpa的核心配置中兼容hibernate的配 -->
<property name="hibernate.show_sql" value="true" /> <property name="hibernate.format_sql" value="true" />
<!--自动创建数据库表:create(运行时创建表),update(如过有表则不创建表),none(不创建表) <property name="hibernate.hbm2ddl.auto" value="create" /> </properties> </persistence-unit> </persistence>
4、测试数据库操作
通过调用EntityManager的方法完成获取事务,以及持久化数据库的操作
方法说明: getTransaction : 获取事务对象 persist : 保存操作 merge : 更新操作 remove : 删除操作 find/getReference : 根据id查询
1 @Test 2 public void test() { 3 /** 4 * 创建实体管理类工厂,借助Persistence的静态方法获取 5 * 其中传递的参数为持久化单元名称,需要jpa配置文件中指定 6 */ 7 EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa"); 8 //创建实体管理类 9 EntityManager em = factory.createEntityManager(); 10 //获取事务对象 11 EntityTransaction tx = em.getTransaction(); 12 //开启事务 13 tx.begin(); 14 Customer c = new Customer(); 15 c.setCustName("天地壹号"); 16 //保存操作 17 em.persist(c); 18 //提交事务 19 tx.commit(); 20 //释放资源 21 em.close(); 22 factory.close(); 23 }
6、抽取JPAUtil工具类,通过工具类生成实体类管理器对象
package top.biyenanhai.dao; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public final class JPAUtil { // JPA的实体管理器工厂:相当于Hibernate的SessionFactory private static EntityManagerFactory em; // 使用静态代码块赋值 static { // 注意:该方法参数必须和persistence.xml中persistence-unit标签name属性取值一致 em = Persistence.createEntityManagerFactory("myPersistUnit"); } /** * 使用管理器工厂生产一个管理器对象 * * @return */ public static EntityManager getEntityManager() { return em.createEntityManager(); } }
三、Spring Data JPA概述:
Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率!Spring Data JPA 让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现,在实际的工作工程中,推荐使用Spring Data JPA + ORM(如:hibernate)完成操作,这样在切换不同的ORM框架时提供了极大的方便,同时也使数据库层操作更加简单,方便解耦。
四、Spring Data JPA 与 JPA和hibernate之间的关系:
JPA是一套规范,内部是有接口和抽象类组成的。hibernate是一套成熟的ORM框架,而且Hibernate实现了JPA规范,所以也可以称hibernate为JPA的一种实现方式,我们使用JPA的API编程,意味着站在更高的角度上看待问题(面向接口编程)。Spring Data JPA是Spring提供的一套对JPA操作更加高级的封装,是在JPA规范下的专门用来进行数据持久化的解决方案。
五、Spring Data JPA快速搭建开发环境:
1、创建maven工程,导入Spring Data JPA的坐标
1 <properties> 2 <spring.version>4.2.4.RELEASE</spring.version> 3 <hibernate.version>5.0.7.Final</hibernate.version> 4 <slf4j.version>1.6.6</slf4j.version> 5 <log4j.version>1.2.12</log4j.version> 6 <c3p0.version>0.9.1.2</c3p0.version> 7 <mysql.version>5.1.6</mysql.version> 8 </properties> 9 10 <dependencies> 11 <!-- junit单元测试 --> 12 <dependency> 13 <groupId>junit</groupId> 14 <artifactId>junit</artifactId> 15 <version>4.12</version> 16 <scope>test</scope> 17 </dependency> 18 19 <!-- spring beg --> 20 <dependency> 21 <groupId>org.aspectj</groupId> 22 <artifactId>aspectjweaver</artifactId> 23 <version>1.6.8</version> 24 </dependency> 25 26 <dependency> 27 <groupId>org.springframework</groupId> 28 <artifactId>spring-aop</artifactId> 29 <version>${spring.version}</version> 30 </dependency> 31 32 <dependency> 33 <groupId>org.springframework</groupId> 34 <artifactId>spring-context</artifactId> 35 <version>${spring.version}</version> 36 </dependency> 37 38 <dependency> 39 <groupId>org.springframework</groupId> 40 <artifactId>spring-context-support</artifactId> 41 <version>${spring.version}</version> 42 </dependency> 43 44 <dependency> 45 <groupId>org.springframework</groupId> 46 <artifactId>spring-orm</artifactId> 47 <version>${spring.version}</version> 48 </dependency> 49 50 <dependency> 51 <groupId>org.springframework</groupId> 52 <artifactId>spring-beans</artifactId> 53 <version>${spring.version}</version> 54 </dependency> 55 56 <dependency> 57 <groupId>org.springframework</groupId> 58 <artifactId>spring-core</artifactId> 59 <version>${spring.version}</version> 60 </dependency> 61 62 <!-- spring end --> 63 64 <!-- hibernate beg --> 65 <dependency> 66 <groupId>org.hibernate</groupId> 67 <artifactId>hibernate-core</artifactId> 68 <version>${hibernate.version}</version> 69 </dependency> 70 <dependency> 71 <groupId>org.hibernate</groupId> 72 <artifactId>hibernate-entitymanager</artifactId> 73 <version>${hibernate.version}</version> 74 </dependency> 75 <dependency> 76 <groupId>org.hibernate</groupId> 77 <artifactId>hibernate-validator</artifactId> 78 <version>5.2.1.Final</version> 79 </dependency> 80 <!-- hibernate end --> 81 82 <!-- c3p0 beg --> 83 <dependency> 84 <groupId>c3p0</groupId> 85 <artifactId>c3p0</artifactId> 86 <version>${c3p0.version}</version> 87 </dependency> 88 <!-- c3p0 end --> 89 90 <!-- log end --> 91 <dependency> 92 <groupId>log4j</groupId> 93 <artifactId>log4j</artifactId> 94 <version>${log4j.version}</version> 95 </dependency> 96 97 <dependency> 98 <groupId>org.slf4j</groupId> 99 <artifactId>slf4j-api</artifactId> 100 <version>${slf4j.version}</version> 101 </dependency> 102 103 <dependency> 104 <groupId>org.slf4j</groupId> 105 <artifactId>slf4j-log4j12</artifactId> 106 <version>${slf4j.version}</version> 107 </dependency> 108 <!-- log end --> 109 110 111 <dependency> 112 <groupId>mysql</groupId> 113 <artifactId>mysql-connector-java</artifactId> 114 <version>${mysql.version}</version> 115 </dependency> 116 117 <dependency> 118 <groupId>org.springframework.data</groupId> 119 <artifactId>spring-data-jpa</artifactId> 120 <version>1.9.0.RELEASE</version> 121 </dependency> 122 123 <dependency> 124 <groupId>org.springframework</groupId> 125 <artifactId>spring-test</artifactId> 126 <version>4.2.4.RELEASE</version> 127 </dependency> 128 129 <!-- el beg 使用spring data jpa 必须引入 --> 130 <dependency> 131 <以上是关于Spring Data JPA的主要内容,如果未能解决你的问题,请参考以下文章 初入spring boot(五 )Spring Data JPA
Spring整合Hibernate实现Spring Data JPA (简单使用)