一、JPA用來替代hibernate
⒈JPA的全稱是JAVA Persistence API。指的是JPA通過注解或者是XML描述對象—關系表的映射關系,並且將運行的實體對象持久化數據庫中。
⒉JPA是一種規范,hibernate是一種實現。同樣的mybatis也是jpa中的一種實現。
二、構建步驟:
⒈創建persistence.xml文件:
⑴、首先在你的項目中的src目錄下新建一個MATA-INF文件夾,文件夾的名字不可以是任意,必須是MATA-INF:
⑵、新建一個xml文件,命名為persistence.xml:
⑶、接下來,在persistence.xml文件中進行相關的配置,如下:
<?xml version="1.0" encoding="UTF-8"?>
<persistence 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"
version="2.1">
<!--persistence單元,name屬性不可少。 -->
<persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL">
<!--可選屬性:設置persistence的提供者 -->
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<!--可選屬性:實體類 -->
<class>entity.BookCard</class>
<!-- 數據庫廠商的屬性 -->
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect"/>
<property name="hibernate.connection.driver_class" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="hibernate.connection.username" value="sa"/>
<property name="hibernate.connection.password" value="123456"/>
<property name="hibernate.connection.url" value="jdbc:sqlserver://localhost:1433;DatabaseName = webLastExam_20160727"/>
<property name="hibernate.show_sql" value="true"></property>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
·name:持久化單元的名字,這個屬性必須要有,用來後面的EntityManagerFactory生成實例的名字。
·transaction-type:使用的實物類型,默認是RESOURCE_LOCAL事務,還有一個是JTA事務。
·provide:EJB Persistence provide 的一個實現類,可以分為不同的ORM,例如MyBatis和Hibernate。
·properties:配置數據庫廠商的屬性,比如SQL-server和mysql、Oracle等。
·class:指明要映射的類,如果不寫就不能在程序運行的時候自動創建數據庫中的表。
⒉在實體類中添加注解:
⑴、在映射的實體類上添加注解:

@Entity :標識這個類是一個JPA實體
@Table(name="BookCard") :根據這個實體類在數據庫中指定生成的表名
⑵、設置主鍵:

@Id :設置數據庫的表的主鍵為Id。
@GeneratedValue : 默認實行自定自定義的主鍵生成策略。
@GenericGeneratorHibernate :在JPA的基礎上進行擴展,hibernate獨自有的主鍵生成策略。
⑶、具體獲取數據類中的定義:(其中紅色的為重要的代碼)
package dao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import entity.BookCard;
//定義數據庫操作接口的實現類,實現接口中方法。
public class MyDaoImp implements MyDao {
//實現接口中的獲取所有的數據的方法
public List<BookCard> getAllBookCard() {
EntityManagerFactory emf =Persistence.createEntityManagerFactory("myJpa");
EntityManager em = emf.createEntityManager();
em=emf.createEntityManager();
em.getTransaction().begin();
//查詢數據
List<BookCard> list = em.createQuery("from BookCard", BookCard.class).getResultList();
em.getTransaction().commit();
em.close();
emf.close();
return list;
}
}
由上面我們可以發現,在JPA中的EntityManagerFactory類似於Hibernate中的SessionFactory;EntityManager類似於Session,EntityManager是實體類管理器,是由EntityManagerFactory創建,每一個EntityManagerFactory稱為一個持久化單元,每個持久化單元可以認為是一個數據源的映射(數據源可以理解為一個數據庫,我們可以在應用服務器中配置不同的數據源,即使用不同的persistenceUtil來映射這些數據源,從而可以實現不同的數據庫之間的操作。)
謝謝浏覽!