深入淺出JPA--執行個體__java

來源:互聯網
上載者:User

    在上一篇部落格部落格<<深入淺出JPA--概述>>中,已經對JPA進行了一個簡單的介紹,本篇部落格就給大家介紹一下關於JPA的具體使用步驟具體的步驟如下:

    (1)建立persistence.xml配置持久化單元,在此檔案中需要指定跟哪個資料庫進行互動,由於JPA本身沒有持久化能力,所以需要指定JPA使用哪個持久化的架構.它就相當於hibernate中的hibernate.cfg.xml

    (2)建立EntityManagerFactory,它類似於hibernate中的sessionFactoy的作用

    (3)建立EntityManager(實體管理器),類似於hibernate中的session.

    (4)建立實體類,使用annotation來描述實體類跟資料庫表之間的一一映射關係.

    (5)使用JPA API 完成資料庫增刪改查操作.


persistence.xml:

<?xml version="1.0" encoding="UTF-8"?><persistence version="1.0"xmlns:persistence="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 persistence_1_0.xsd ">    <persistence-unit name="mysqlJPA" transaction-type="RESOURCE_LOCAL">          <properties>              <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />              <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />              <property name="hibernate.connection.username" value="root" />              <property name="hibernate.connection.password" value="123456" />              <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3309/jpadb" />              <property name="hibernate.max_fetch_depth" value="3" />              <property name="hibernate.hbm2ddl.auto" value="update" />          </properties>      </persistence-unit>  </persistence> 

實體Entity:

import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;@Entitypublic class Person {private Integer id;private String name;@Id @GeneratedValuepublic Integer getId() {return id;}public void setId(Integer id) {this.id = id;}@Column(length=12)public String getName() {return name;}public void setName(String name) {this.name = name;}}

單元測試類junitTest

import it.tanghuan.bean.Person;import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;import org.junit.BeforeClass;import org.junit.Test;public class jpaTest {@BeforeClasspublic static void setUpBeforeClass() throws Exception {}@Testpublic void createTable() {EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");factory.close();}@Testpublic void Testsave() {EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");EntityManager em = factory.createEntityManager();em.getTransaction().begin(); // 開始事務Person person = new Person();person.setName("huagngua");em.persist(person); // 持久化實體em.getTransaction().commit(); // 提交事務em.close();factory.close();}@Testpublic void Testupdate() {EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");EntityManager em = factory.createEntityManager();em.getTransaction().begin(); // 開始事務Person person = em.find(Person.class, 1);person.setName("tanghuan"); // person為託管狀態em.persist(person); // 持久化實體em.getTransaction().commit(); // 提交事務em.close();factory.close();}@Testpublic void Testupdate2() {EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");EntityManager em = factory.createEntityManager(); // 建立實體管理器em.getTransaction().begin(); // 開始事務Person person = em.find(Person.class, 1);em.clear(); // 把實體管理器中的所有實體變為脫管狀態person.setName("tanghuan2"); // person為託管狀態em.merge(person); // 把脫管狀態變為託管狀態,merge可以自動選擇inser or update資料em.getTransaction().commit(); // 提交事務em.close();factory.close();}@Testpublic void Testremove() {EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");EntityManager em = factory.createEntityManager();em.getTransaction().begin(); // 開始事務Person person = em.find(Person.class, 1);em.remove(person); // 刪除實體em.getTransaction().commit(); // 提交事務em.close();factory.close();}@Testpublic void Testfind() {EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");EntityManager em = factory.createEntityManager();Person person = em.find(Person.class, 2);System.out.println(person.getName());em.close();factory.close();}@Testpublic void Testfind2() {EntityManagerFactory factory = Persistence.createEntityManagerFactory("mysqlJPA");EntityManager em = factory.createEntityManager();Person person = em.getReference(Person.class, 2); // 消極式載入,沒有相應資料時會出現異常// ,類似hibernate中的load.在未調用的時候,person.getid和person.getname都為nullSystem.out.println(person.getName()); // 真正調用時才載入資料em.close();factory.close();}}

麻雀雖小,五髒俱全,一個小小的demo完整表現了JPA的執行過程.用一張圖可以這樣來表示:

 

總結:

    在上一篇部落格中說過,JPA是ORM的一種標準,而hibernate是ORM的一種實現.從jpa的使用步驟和執行過程我們可以看出hibernate的實現就是以JPA的規範作為標準的.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.