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