一、JPA简介:
- JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或
XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 Sun引入新的JPA
ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。 - 作用:使得应用程序以统一的方式访问持久层
二、搭建环境:
1、创建一个maven 项目
2、导入需要的jar包
3、配置jpa核心配置文件
4、根据数据库表编写实体类
5、配置实体类和数据库表的映射关系、实体类属性和数据库表中字段的映射关系
6、测试(执行增删改查的操作)
三、操作步骤:
1、创建一个简单的maven项目,在pom.xml中导入相应的jar包(jar包版本看个人需要):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yunji</groupId>
<artifactId>jpa</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- hibernate-entitymanager -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.2.17.Final</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
2、在项目中的resource文件下新建一个文件夹META-INF
3、在项目中的resource文件下META-INF创建一个jpa的核心配置文件
src/main/resources/META-INF/persistence.xml;
注意:文件名和位置都是固定!!!!!

XML文件persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<!--
name 属性用于定义持久化单元的名字, 必选
transaction-type:事务管理方式
RESOURCE_LOCAL:默认值,数据库级别的事务,本地事务管理
JTA:分布式事务管理
-->
<persistence-unit name="jpa" transaction-type="RESOURCE_LOCAL">
<!--jpa实现方式-->
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<!--数据库信息-->
<!--用户名,密码,驱动,数据库地址-->
<!--driver-->
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<!--url-->
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&characterEncoding=utf8" />
<!--user-->
<property name="javax.persistence.jdbc.user" value="root" />
<!--password-->
<property name="javax.persistence.jdbc.password" value="jtt" />
<!--可选配置,配置jpa实现方的配置信息-->
<!--是否在控制台显示sql-->
<property name="hibernate.show_sql" value="true"/>
<!--数据库方言-->
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<!--自动创建表:
value:
create:程序运行时创建数据库表(如果有,则删除表,再创建)
update:程序运行时创建数据库表(如果有,不会创建表)
none:不会创建表
-->
<property name="hibernate.hbm2ddl.auto" value="update"/>
<!--是否格式化sql语句-->
<property name="hibernate.format_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
4、根据数据库表创建实体类,配置好映射关系:
package com.yunji.entity;
import javax.persistence.*;
/**
* @program: jpa
* @description: student实体类
* @author: 老铁
* @create: 2019-10-10 14:17
* <p>
* 配置映射关系:
* 1、实体类和数据库表的映射关系
* 2、实体类属性和数据库表字段的映射关系
* <p>
* @Entity:声明实体类
* @Table:配置和表的映射关系 name:配置表的名称
**/
@Entity
@Table(name = "student")
public class Student {
/**
* @Id:声明主键配置
* @GeneratedValue:配置主键的生成策略
* strategy:
* GenerationType.IDENTITY:自增长(前提是数据库支持自增长)
* GenerationType.SEQUENCE:序列(前提是数据库支持序列)
* GenerationType.TABLE:jpa提供的一种机制,通过一张数据库表的形式帮助我们完成主键自增
* GenerationType.AUTO:由程序自动的帮助我们选择主键生成策略
* @Column:配置属性和字段的映射关系
* name:数据库表字段名
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "name")
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
5、创建测试类,使用单元测试进行测试:
package com.yunji;
import com.yunji.entity.Student;
import com.yunji.util.JpaUtils;
import org.junit.Test;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
/**
* @program: jpa
* @description: 测试类
* @author: 老铁
* @create: 2019-10-10 14:32
* <p>
* <p>
* jpa操作步骤:
* 1、加载配置文件创建工厂对象
* 2、通过工厂获取实体管理器
* 3、获取事务对象,开启事务
* 4、完成增删改查操作
* 5、提交事务
* 6、释放资源
**/
public class JpaTest {
/**
* 新增操作
*/
@Test
public void test01() {
//1、加载配置文件创建工厂对象
//jpa是XML文件persistence.xml中的持久化单元名
// <persistence-unit name="jpa" transaction-type="RESOURCE_LOCAL">
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("jpa");
//2、通过工厂获取实体管理器
EntityManager entityManager = entityManagerFactory.createEntityManager();
//3、获取事务对象
EntityTransaction transaction = entityManager.getTransaction();
//开启事务
transaction.begin();
//添加的对象
Student student = new Student();
student.setName("hahha");
//4、完成增删改查操作-----这里是新增操作
entityManager.persist(student);
//5、提交事务
transaction.commit();
//6、释放资源
entityManager.close();
entityManagerFactory.close();
}
}
Persistence:
主要用来创建EntityManagerFactory
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(“persistence.xml中持久化单元的名字”);
EntityManagerFactory:
EntityManagerFactory 接口主要用来创建 EntityManager 实例。该接口约定了如下4个方法:
createEntityManager(): 用于创建实体管理器对象实例。
createEntityManager(Map map): 用于创建实体管理器对象实例的重载方法,Map 参数用于提供 EntityManager 的属性。
isOpen(): 检查 EntityManagerFactory 是否处于打开状态。实体管理器工厂创建后一直处于打开状态,除非调用close()方法将其关闭。
close(): 关闭 EntityManagerFactory 。 EntityManagerFactory 关闭后将释放所有资源,isOpen()方法测试将返回 false,其它方法将不能调用,否则将导致IllegalStateException异常。

299

被折叠的 条评论
为什么被折叠?



