JPA全称为Java Persistence API,即Java持久化APIjava
JPA是Hibernate的一个抽象(就像JDBC和JDBC驱动的关系),从功能上来讲,JPA是Hibernate功能的一个子集。mysql
使用JPA持久化对象的步骤sql
1.建立persistence.xml,在这个文件中配置持久化单元数据库
>须要指定跟哪一个数据库进行交互框架
>须要指定JPA使用哪一个持久化的框架以及配置该框架的基本属性ide
2.建立实体类,使用annotation来描述实体跟数据库表之间的映射关系ui
3.使用JPA API完成数据增删改查操做this
>建立EntityManagerFactory(对应Hibernate中的SessionFactory)url
>建立EntityManager(对应Hibernate中的Session).net
1.在项目中加入Hibernate的required和jpa文件夹下的全部jar包,加入MySQL驱动包
2.新建JPA项目
3.配置persistence.xml,ppersistence.xml文件打成jar包后,必须保存在META-INF文件夹下
<?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-1" transaction-type="RESOURCE_LOCAL"> <!-- 配置使用什么ORM产品来做为JPA的实现 1.实际上配置的是javax.persistence.spi.PersistenceProvider接口的实现类 2.若JPA项目中只有一个JPA的实现产品,则也能够不配置该节点 --> <provider>org.hibernate.ejb.HibernatePersistence</provider> <!-- 添加持久化类 --> <class>com.f145a.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:///jpa" /> <property name="javax.persistence.jdbc.user" value="root" /> <property name="javax.persistence.jdbc.password" value="123456" /> <!-- 配置JPA实现产品的基本属性-配置Hibernate的基本属性 --> <property name="hibernate.format_sql" value="true" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.hbm2ddl.auto" value="update" /> </properties> </persistence-unit> </persistence>
4.建立实体类Customer.java
@Entity:表示该类是一个可持久化实体类,标记了该注释的类能够由实体管理器EntityManager来管理
@Table:表示该实体类映射为数据库中的指定的一个表。使用name属性指定数据库的表名,若是表名与类名相同,那么能够省去name属性(以下例子便可省去name属性)
@Id:表示该属性为该实体的主键。一般置于属性声明语句以前,也可置于属性的getter方法前(以下例子)
@GeneratedValue:设置Id的生成规则。经过strategy属性指定,默认状况下,JPA自动选择一个最适合底层数据库的主键生成策略:SQLServer对应identity,MySQL对应autoincrement
在javax.presistence.GenerationType中定义了如下几种可供选择的策略:
-IDENTITY:采用数据库ID自增加的方式来自增主键字段,Oracle不支持这种方式
-AUTO:JPA自动选择合适的策略,是默认选项
-SEQUENCE:经过序列产生主键,经过@SequenceGenerator注解指定序列名,MySQl不支持这种方式
-TABLE:经过表产生主键,框架借由表模拟序列产生主键,使用该策略可使应用易于数据库移植
@Column:表示实体类的属性对应表中的指定字段。用name属性指定数据表的列名,如实体的属性与其映射的数据表的列名相同便可省略
@Basic:表示一个简单的属性到数据库表的字段映射,对于没有任何标注的getxx()方法,默认即为@Basic
package com.f145a.jpa.helloworld; 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="customer") @Entity public class Customer { private Integer id; private String lastName; private String email; private int age; @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 String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
5.实现mian方法Main.java
package com.f145a.jpa.helloworld; 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-1"; EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName); //2.建立EntityManager EntityManager entityManager = entityManagerFactory.createEntityManager(); //3。开启事务 EntityTransaction transaction = entityManager.getTransaction(); transaction.begin(); //4.进行持久化操做 Customer customer=new Customer(); customer.setAge(34); customer.setEmail("tom@qq.com"); customer.setLastName("Tom"); entityManager.persist(customer); //5.提交事务 transaction.commit(); //6.关闭EntityManager entityManager.close(); //7.关闭EntityManagerFactory entityManagerFactory.close(); } }
6.运行Main类,能够看到数据库中新建了一个customer表,并插入了一条数据
欢迎访问个人我的博客 http://www.chengzequn.top