从JDBC到JPA (2)
·
JPA 是什么?
JPA全称Java Persistence API,是一组用于将数据存入数据库的类和方法的集合。JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
- Java Persistence API(Java 持久层 API):用于对象持久化的 API
- 作用:使得应用程序以统一的方式访问持久层
- JPA 与 Hibernate是什么关系呢:
1)JPA 是 Hibernate 的一个抽象,就像 JDBC 和 JDBC 驱动的关系
2)JPA 是一种 ORM 规范,是 Hibernate 功能的一个子集 (既然 JPA 是规范,Hibernate 对 JPA 进行了扩展,那么说 JPA 是 Hibernate 的一个子集不为过)
3)Hibernate 是 JPA 的一个实现
JPA的简单使用
先了解一下实体类相关注释
* @Table 当实体类与映射的数据库表名不同名时需要使用 @Table 注解,该注解与 @Entity 注解并列使用
* 若表名和类型相同时,省略@Table,比如类Users 和表 users;
* 若不相同时,必须有@Table,并设置name,为该类对应的表名。@Table(name="users")
*
* @Entity 修饰实体类,指明该类将映射到指定的数据表
*
* @Id 标识该属性为主键,一般标注在该属性的 getter 方法上
*
* @Transient 标注该属性不做与表的映射(原因:可能表中没有该属性对应的字段)
*
* @Basic 默认所有属性都有该注解(主键需要单独使用@Id),所以可以省略,也可以放在属性或getter方法上。
*
* @Column 类中属性名和表中对应字段名不相同时,会使用该注解,指明在类中对应的字段
* @Column(name="对应的表中字段名")
*
* @Temporal :向数据库映射日期(Date)属性时用来调整映射的精度。Date 类型的数据有 DATE, TIME, 和 TIMESTAMP 三种精度(即单纯的日期,时间精确到秒,或者两者兼备)
*
* @GeneratedValue 用于标注主键的生成策略,通过strategy 属性指定。默认情况下,JPA 自动选择一个最适合底层数据库的主键生成策略:SqlServer对应identity,MySQL 对应 auto increment。
实体类创建
package com.xm.jpa;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Table(name="r_customers")
@Entity
public class Customer {
private Integer id;
private String name;
private String email;
private Integer age;
@GeneratedValue(strategy=GenerationType.AUTO)
@Id
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name="nickname") //若字段与属性名不一致时填写
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Customer [id=" + id + ", name=" + name + ", email=" + email + ", age=" + age + "]";
}
}
JPA的配置文件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">
<persistence-unit name="JPA" transaction-type="RESOURCE_LOCAL">
<!-- 配置jpa ORM产品 -->
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<!-- 添加对应的持久化类 -->
<class>com.xm.jpa.Customer</class>
<properties>
<!-- jpa中连接数据库 -->
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/customer?useUnicode=true&characterEncoding=utf-8" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="123456"></property>
<!-- jpa中配置hibernate基本属性 -->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
测试类
package com.xm.jpa;
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
String persistenceUnitName = "jpa";
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName);
//2.创建 EntityManager
EntityManager entityManager = entityManagerFactory.createEntityManager();
//4.开启事务
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
//5.进行持久化操作
Customer customer = new Customer();
customer.setName("xm");
customer.setEmail("xmaa@gmail.com");
customer.setAge(18);
entityManager.persist(customer);
//6.提交事务
transaction.commit();
//7.关闭 EntityManager
entityManager.close();
//8.关闭 EntityManagerFactory
entityManagerFactory.close();
}
}
以上就是jpa的一个简单使用,还有很多复杂操作就以后再研究吧。
更多推荐



所有评论(0)