JPA開發入門執行個體,jpa入門執行個體

來源:互聯網
上載者:User

JPA開發入門執行個體,jpa入門執行個體

一. 什麼是JPA

JPA是sun官方提出的Java持久化規範, 它為Java開發人員提供了一種對象/關係映射工具來管理Java應用中的關係資料, 

它的出現主要是為了簡化現有的持久化開發工作和整合ORM技術.


JPA總體思想和現有的Hibernate、TopLink等ORM架構大體一致. 總的來說, JPA包括以下3方面的技術:

1. ORM映射中繼資料(JPA支援XML和註解兩種中繼資料的形式) - 中繼資料描述對象和表之間的映射關係.

2. Java持久化API: 用來操作實體物件, 執行CRUD操作,架構在後台替我們完成所有的事情, 開發人員可以從繁瑣的JDBC和SQL代碼中解脫出來.

3. 查詢語句: 通過物件導向而非面向資料庫的查詢語句查詢資料, 避免程式和SQL語句緊密耦合.


二. JPA執行個體:

1. 代碼結構圖:



2. 配置persistence.xml

<?xml version="1.0"?><persistence 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_1_0.xsd" version="1.0">   <persistence-unit name="test" transaction-type="RESOURCE_LOCAL">     <provider>org.hibernate.ejb.HibernatePersistence</provider>      <properties>         <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>         <property name="hibernate.connection.driver_class" value="org.gjt.mm.mysql.Driver"/>         <property name="hibernate.connection.username" value="root"/>         <property name="hibernate.connection.password" value="root"/>         <property name="hibernate.connection.url"          value="jdbc:mysql://localhost:3306/jpa?useUnicode=true&characterEncoding=UTF-8"/>         <property name="hibernate.max_fetch_depth" value="3"/>         <property name="hibernate.hbm2ddl.auto" value="update"/>      </properties>   </persistence-unit></persistence>

JPA規範要求在類路徑的META-INF目錄下放置persistence.xml,檔案的名稱是固定的


3. 實體類

(1) Person:

@Entity@Table(name = "person")public class Person {private Integer id;private String name;private Date birthday;private Gender gender = Gender.MAN;private String info;private Byte[] file;private String imagepath;public Person() {}public Person(String name, Date d) {this.name = name;this.birthday = d;}@Id@GeneratedValue(strategy = GenerationType.AUTO)public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}@Column(length = 20, nullable = false, name = "personName")public String getName() {return name;}public void setName(String name) {this.name = name;}@Temporal(TemporalType.DATE)public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}@Enumerated(EnumType.STRING)@Column(length = 5, nullable = false)public Gender getGender() {return gender;}public void setGender(Gender gender) {this.gender = gender;}@Lobpublic String getInfo() {return info;}public void setInfo(String info) {this.info = info;}@Lob@Basic(fetch = FetchType.LAZY)public Byte[] getFile() {return file;}public void setFile(Byte[] file) {this.file = file;}@Transientpublic String getImagepath() {return imagepath;}public void setImagepath(String imagepath) {this.imagepath = imagepath;}}


(2) Gender

public enum Gender {MAN, WOMAN}

4. 測試代碼

public class PersonTest {private static EntityManager em;private static EntityManagerFactory factory;@BeforeClasspublic static void before() throws Exception {factory = Persistence.createEntityManagerFactory("test");em = factory.createEntityManager();}@AfterClasspublic static void after() throws Exception {em.close();factory.close();}@Testpublic void save() {em.getTransaction().begin();em.persist(new Person("wangwu", new Date()));em.getTransaction().commit();}@Testpublic void getPerson1() {Person person = em.find(Person.class, 1); // get()System.out.println(person.getName());}@Testpublic void getPerson2() {Person person = em.getReference(Person.class, 2); // load()System.out.println(person.getName());}@Testpublic void updatePerson1() {em.getTransaction().begin();Person person = em.find(Person.class, 1);person.setName("老張");em.getTransaction().commit();}@Testpublic void updatePerson2() {em.getTransaction().begin();Person person = em.find(Person.class, 1);em.clear(); // 把實體變成游離狀態person.setName("老王");em.merge(person); // 用於把游離狀態的對象更新同步到資料庫em.getTransaction().commit();}@Testpublic void delete() {em.getTransaction().begin();Person person = em.find(Person.class, 1);em.remove(person); // 把託管狀態的實體刪掉em.getTransaction().commit();}@Testpublic void query() {Query query = em.createQuery("select o from Person o where o.id=?1");query.setParameter(1, 2);Person person = (Person) query.getSingleResult();System.out.println(person.getName());}@Testpublic void deletequery() {em.getTransaction().begin();Query query = em.createQuery("delete from Person o where o.id=?1");query.setParameter(1, 2); // id為2的刪除query.executeUpdate();em.getTransaction().commit();}@Testpublic void updatequery() {em.getTransaction().begin();Query query = em.createQuery("update Person o set o.name=:name where o.id=:id");query.setParameter("name", "xxx");query.setParameter("id", 3);query.executeUpdate();em.getTransaction().commit();}}

三. 總結:

JPA不是一種新的ORM架構,他的出現只是用於規範現有的ORM技術,他不能取代現有的Hibernate、TopLink等ORM架構。相反,在採用JPA開發時,我們仍將使用到這些ORM架構,只是此時開發出來的應用不再依賴於某個持久化供應商。應用可以在不修改代碼的情況下在任何JPA環境下運行,真正做到低耦合,可擴充的程式設計。




Android開發的入門級執行個體

推薦你看看這個網址吧,講解的非常初級,很適合入門學習
code.google.com/p/androidbmi/wiki/IntroAndroid
 
對於JPA的一入門問題

一個實體Bean 由實體類和persistence.xml 檔案組成。persistence.xml 檔案在Jar 檔案的META-INF 目錄。persistence.xml 檔案指定實體Bean 使用的資料來源及EntityManager 對象的預設行為。persistence.xml檔案的配置說明如下:
<persistence>
<persistence-unit name="xxx">
<jta-data-source>java:/ MySqlDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>
</persistence-unit>
</persistence>
persistence-unit 節點可以有一個或多個,每個persistence-unit 節點定義了持久化內容名稱、使用的資料來源名稱及Hibernate 屬性。name 屬性用作設定持久化名稱。jta-data-source 節點用作指定實體Bean 使用的資料來源名稱,指定資料來源名稱時java:/ 首碼不能缺少,資料來源名稱大小寫敏感。properties 節點用作指定Hibernate 的各項屬性,如果hibernate.hbm2ddl.auto的值設為create-drop,在實體Bean 發布及卸載時將自動建立及刪除相應資料庫表。

檢查hibernate.hbm2ddl.auto的配置,如果有,可將這條刪掉
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.