程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> ssh(sturts2_spring_hibernate) 框架搭建之JPA代替hibernate,springjpahibernate

ssh(sturts2_spring_hibernate) 框架搭建之JPA代替hibernate,springjpahibernate

編輯:JAVA綜合教程

ssh(sturts2_spring_hibernate) 框架搭建之JPA代替hibernate,springjpahibernate


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

 


 

      謝謝浏覽!

    

 

    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved