1. 程式人生 > >JPA 菜鳥教程 2 單表操作

JPA 菜鳥教程 2 單表操作

GitHub

JPA

Sun官方提出的Java持久化規範。它為Java開發人員提供了一種物件/關係對映工具來管理Java應用中的關係資料。他的出現主要是為了簡化現有的持久化開發工作和整合ORM技術,結束現在Hibernate、TopLink等ORM框架各自為營的局面。值得注意的是,JPA是在充分吸收了現有Hibernate、TopLink等ORM框架的基礎上發展而來的,具有易於使用、伸縮性強等優點

  • 簡化現有Java EE和Java SE應用的物件持久化的開發工作
  • Sun希望整合ORM技術,實現一統江湖。

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

User

package com.jege.jpa.single.table;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

/**
 * @author JE哥
 * @email [email protected]
 * @description:單表
 */
@Entity
@Table(name = "t_user")
public class
User {
@Id @GeneratedValue private Long id; private String name; private Integer age; public User() { } public User(String name, Integer age) { this.name = name; this.age = age; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public
String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", age=" + age + "]"; } }

SingleTableTest

package com.jege.jpa.single.table;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

/**
 * @author JE哥
 * @email [email protected]
 * @description:單表CRUD Test
 */
public class SingleTableTest {
  private static EntityManagerFactory entityManagerFactory = null;
  private EntityManager entityManager = null;

  @BeforeClass
  public static void setUpBeforeClass() throws Exception {
    entityManagerFactory = Persistence.createEntityManagerFactory("com.jege.jpa");
  }

  @Before
  public void persist() throws Exception {
    entityManager = entityManagerFactory.createEntityManager();
    entityManager.getTransaction().begin();

    User user = new User("je-ge", 22);

    System.out.println("儲存之前:" + user);
    entityManager.persist(user);// JPA會自動把儲存後的主鍵放到當前物件的id裡面
    System.out.println("儲存之後:" + user);
    System.out.println("+++++++++++++++");
  }

  @Test
  public void modify() throws Exception {
    User user = entityManager.find(User.class, 1L);
    System.out.println("修改前:" + user);
    user.setName("JE-GE");
    user.setAge(18);
    entityManager.merge(user);
    user = entityManager.find(User.class, 1L);
    System.out.println("修改後:" + user);
  }

  @Test
  public void find() throws Exception {
    User user = entityManager.find(User.class, 1L);
    System.out.println(user);
  }

  @Test
  public void remove() throws Exception {
    User user = entityManager.find(User.class, 1L);
    System.out.println("刪除前:" + user);
    entityManager.remove(user);
    user = entityManager.find(User.class, 1L);
    System.out.println("刪除後:" + user);
  }

  @After
  public void tearDown() throws Exception {
    entityManager.getTransaction().commit();
    if (entityManager != null && entityManager.isOpen())
      entityManager.close();
  }

  @AfterClass
  public static void tearDownAfterClass() throws Exception {
    if (entityManagerFactory != null && entityManagerFactory.isOpen())
      entityManagerFactory.close();
  }

}

核心API

Persistence

  • 主要用於建立EntityManagerFactory,根據傳入的Persistence Unit名稱來建立對應的EntityManagerFactory。

EntityManagerFactory

  • EntityManagerFactory中應儲存了對應的persistence unit中的資料庫配置資訊和所有實體及關係以及預定義的JPQL語句。同時,EntityManagerFactory還負責維護二級快取。
  • EntityManagerFactory物件的建立會有較大的開銷,而且EntityManagerFactory物件採取了執行緒安全的設計方式,因此在實際中EntityManagerFactory物件可以儘量的共享,在大多數情況下,一個應用中針對一個數據庫可以共享一個EntityManagerFactory例項。

EntityManager

  • 使用最廣泛,類似於Hibernate的Session物件。
  • 它提供和持久化相關的操作。增、刪、改、查等。並不是執行緒安全的,故一個EntityManager物件只可以由一個執行緒使用,並且避免多個執行緒共享。
  • 不過是輕量級的,建立和銷燬不需要消耗太多資源。EntityManager中也有類似Hibernate Session的一級快取。

JPA中的註解

  • @Entity:將領域物件標註為一個實體,預設情況下類名為表名,通過@Table(name = “t_user”)可以重新指定。
  • @Id:屬性對應的表的主鍵。
  • @GeneratedValue:主鍵產生策略,通過startage屬性指定。
  • @Column:屬性對應的表字段。

其他關聯專案

原始碼地址

如果覺得我的文章或者程式碼對您有幫助,可以請我喝杯咖啡。
您的支援將鼓勵我繼續創作!謝謝!
微信打賞
支付寶打賞

相關推薦

JPA 教程 2 操作

GitHub JPA Sun官方提出的Java持久化規範。它為Java開發人員提供了一種物件/關係對映工具來管理Java應用中的關係資料。他的出現主要是為了簡化現有的持久化開發工作和整合ORM技術,結束現在Hibernate、TopLink等OR

JPA 教程 15 繼承-一個-SINGLE_TABLE

column turn rate pre school fill 技術 一個表 tor 原地址:http://blog.csdn.net/JE_GE/article/details/53678422 繼承映射策略 一個類繼承結構一個表的策略,最終只生成一個表,這是繼承映射的

JPA 教程 3 單向多對一

GitHub JPA中的@ManyToOne 主要屬性 - name(必需): 設定“many”方所包含的“one”方所對應的持久化類的屬性名 - column(可選): 設定one方的主鍵,即持久化類的屬性對應的表的外來鍵 - class

JPA 教程 19 jpa uuid主鍵生成策略

GitHub ddl語句 CREATE TABLE `t_user` ( `id` varchar(32) NOT NULL, `name` varchar(255) DEFAU

Maven 教程 2 專案目錄結構

目錄結構 說明 src/main/java application library sources - java原始碼檔案,會自動編譯到classes資料夾下 src

JPA 教程 6 單向多對多

GitHub JPA中的@ManyToMany @ManyToMany註釋表示模型類是多對多關係的一端。 @JoinTable 描述了多對多關係的資料表關係。 name 屬性指定中間表名稱 joinColumns 定義中間表與Teach

17-2 orm操作和多操作

修改 rst and 默認 div tinc start 去掉 nta 參考:https://www.cnblogs.com/liwenzhou/p/8660826.html 一 ORM單表操作 1 增刪改查 1 1. 查詢 2 1. 查所有 3 models.P

[LeetCode刷題集] 2. Add Two Numbers 單鏈表示的兩個數相加

給定兩個非空連結串列來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回一個新的連結串列。 你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。 示例: 輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 輸出:7

求大佬解決關於伺服器中間資料操作的問題

求大佬解決菜鳥關於伺服器中間表資料操作的問題 現在專案上的需求,部分基礎資料是從ERP拿過來的。 ERP把資料放在伺服器中間表上,而我要去中間表取資料,可以用webservice取嗎?具體實現怎麼實現,有沒有大佬給點提示。 我自己也在網上 看了很多關於webservice的例子

教程 | Egret場景切換管理類切換和例使用方法

場景切換是很多開發者在開發過程中必不可少的一個環節,當專案中有兩個或兩個以上的遊戲場景時,怎樣管理這些場景,能夠使它們之間的切換更加方便呢?今天就為大家介紹場景切換管理類的切換方法和單例的使用方法。 案例原始碼:https://github.com/hkjlx/qhcj  首先建立一個所有場景的父類Scene

教程》| Egret場景切換管理類切換和例使用方法

場景切換是很多開發者在開發過程中必不可少的一個環節,當專案中有兩個或兩個以上的遊戲場景時,怎樣管理這些場景,能夠使它們之間的切換更加方便呢?今天就為大家介紹場景切換管理類的切換方法和單例的使用方法。 案例原始碼:https://github.com/hkjlx/qhcj

設計模式:例模式|教程

定義 單例模式(Singleton Pattern)是 Java 中最簡單的設計模式之一。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。 這種模式涉及到一個單一的類,該類負責建立自己的物件,同時確保只有單個物件被建立。這個類提供了一種

教程之工具使用(五)——JRebel與Windows服務的Tomcat集成

-m end 個人 再見 proc key pre 安裝 target 之前寫過一篇Tomcat借助JRebel支持熱部署的文章——《借助JRebel使Tomcat支持熱部署 》。介紹的是在開發、測試環境中的配置。可是正式的部署環境。我們不會通過命令行來啟動Tomcat,

hibernate_05_操作_對象類型

exception doctype @override 1.0 服務註冊 dial 照片 dia [] 本篇使用hibernate輸出一個對象(圖片) 先寫一個java類 1 package com.imooc.hibernate; 2 3 import java

Angular js 過濾器 筆記(轉自教程

per test 筆記 ring ood filter 子集 true 貨幣格式 1、uppercase,lowercase 大小寫轉換 {{ "lower cap string" | uppercase }} // 結果:LOWER CAP STRING {{ "TA

教程-練習實例答案I

core 其中a是一個數字 再落下 乘法 white 超過 -1 英文字母 三位數 題目:有四個數字:1、2、3、4,能組成多少個互不相同且無重復數字的三位數?各是多少? 1 #coding=utf-8 2 3 from itertools import permuta

教程 Python 手記 1

報錯信息 數據類型 字符串表 ring max last pda 每次 none Python是一種解釋型、面向對象、動態數據類型的高級程序設計語言。 編碼 編碼默認情況下,Python 3 源碼文件以 UTF-8 編碼,所有字符串都是 unicode 字符串。 當然你

sphinx 教程

edt cool lis file lpad 抽象 mage settings length 簡介 Sphinx 是一種工具,它允許開發人員以純文本格式編寫文檔,以便采用滿足不同需求的格式輕松生成輸出。這在使用 Version Control System 追蹤變更時非常有

09-hibernate操作(1)

hbm.xml ive eat ring sets () 16px bin 提交 1,單一主鍵 2,基本類型 3,對象類型 4,組件屬性 5,單表操作 單一主鍵 常用生成策略: assigned 有程序員生成(手工) native  由數據庫底層,如果是mysql是in

10-hibernate操作-組件屬性

http -h idt wid 文件 技術 set string alt 組件屬性: 實體類中某個屬性屬於用戶自定義的類的對象,比如在實體類中某個屬性是自定義類的對象: 這個Address是一個用戶自定義類。 該自定義類Address定義如下: //地址類 public