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