一、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來映射這些數據源,從而可以實現不同的數據庫之間的操作。)
謝謝浏覽!