学习JPA主要从三个方面学习
- ORM 映射元数据:JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。
- 核心API:用来操作实体对象,执行CRUD操作,框架在后台完成所有的事情。
- 查询语言(JPQL):JPQL使得JPA可以做到面向对象查询。
项目创建步骤:
- 使用eclipse创建JPA工程,eclipse会给我们自动创建persistence.xml,在这个文件中配置持久化单元。该文件的位置按照JPA 规范必须放在META-INF目录下,文件名称也必须是固定的persistence.xml。配置内容:1. 数据库信息配置,指定与哪个数据库进行交互;2. 需要指定JPA的供应商(即JPA使用哪个ORM框架以及该框架的基本属性配置)
- 创建实体类,使用注解来描述实体类跟数据库表之间的映射关系
- 使用JPA API 完成数据的增、删、改、查操作。1. 创建 EntityManagerFactory(对应Hibernate中的SessionFactory);2. 创建EntityManager(对应Hibernate中的Session)
代码示例
Customer实体类
@Table(name = "JPA_CUSTOMERS")
@Entity
public class Customer {
private Integer id;
private String lastName;
private int age;
private String email;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@GeneratedValue(strategy = GenerationType.AUTO)
@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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Main方法类
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
public class Main {
public static void main(String[] args) {
// 1. 创建 EntityManagerFactory
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("jpa-1");
// 2. 创建 EntityManager
EntityManager entityManager = entityManagerFactory.createEntityManager();
// 3. 开启事务
EntityTransaction entityTransaction = entityManager.getTransaction();
entityTransaction.begin();
// 4. 进行持久化操作
Customer customer = new Customer();
customer.setAge(12);
customer.setLastName("JPA");
customer.setEmail("[email protected]");
entityManager.persist(customer);
// 5. 提交事务
entityTransaction.commit();
// 6. 关闭 EntityManager
entityManager.close();
entityManagerFactory.close();
}
}
persistence.xml配置文件及说明
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
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">
<!--
name:用于定义持久化单元的名字,必填
transaction-type:指定 JPA 的事务处理策略,
RESOURCE_LOCAL:默认值,数据库级别的事务,只针对一种数据库,不支持分布式事务
JTA:支持分布式事务
-->
<persistence-unit name="jpa-1" transaction-type="RESOURCE_LOCAL">
<!--
配置使用什么 ORM 产品作为 JPA 实现
1. 实际上配置的是 javax.persotence.spi.PersistenceProvider 接口实现类
2. 若 JPA 项目中只有一个 JPA 产品,则也可以不配置该节点
-->
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!-- 配置持久化类 -->
<class>com.atguigu.jpa.helloworld.Customer</class>
<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="root" />
<!-- 配置 JPA 实现产品的基本属性,即配置 Hibernate 的基本属性 -->
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.show_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
声明:以上博文内容整理自S硅谷JPA教程,非常感谢!