首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

在 Visual Web 應用程式中使用 Java Persistence API(上):環境建置與實體綁定

     編輯:Java 相關知識

系列概覽

本系列兩篇文章示範在 NetBeans IDE 6.0 Visual Web 工具中使用 JPA(Java Persistence API)開發資料庫應用。本文(上)涵蓋環境建置、實體類生成、持久單元配置、Visual Web 專案與 Java SE 專案整合、Table 組件綁定實體陣列。下文將示範 CRUD 操作實作。

技術棧與先決條件

  • NetBeans IDE 6.0 + Visual Web Pack
  • Sun Java Application Server 9 / GlassFish(Java EE 5 相容容器)
  • Tomcat 6.0.14 亦可
  • Derby Travel 範例資料庫(或自建)

核心優勢:為何選擇 JPA

  • POJO 實體:無需繼承特定基類、實作特定介面,可序列化、可遠程傳遞、可在非持久環境運行
  • 標準化 CRUD API:EntityManager 統一持久化操作
  • 可攜性:第三方持久化提供者易開發插件,應用程式不綁定特定容器/資料庫
  • 原生查詢支援:可使用資料庫原生 SQL
  • 樂觀鎖定:高併發場景效能優於悲觀鎖定

步驟一:建立資料庫表

Derby Sample 資料庫建立 Users 表


create table "APP"."USERS" (
    userName VARCHAR(50),
    password VARCHAR(12),
    email_address VARCHAR(50),
    user_id INTEGER GENERATED ALWAYS AS IDENTITY
);
alter table Users add constraint usersPK PRIMARY KEY (user_id);

INSERT INTO Users VALUES ('Joe', 'joepw', 'joe@email.com', DEFAULT);
INSERT INTO Users VALUES ('Sarah', 'mypassword', 'sarah@sun.com', DEFAULT);
INSERT INTO Users VALUES ('Jane Doe', 'janie', 'jane@hotmail.com', DEFAULT);

關鍵:GENERATED ALWAYS AS IDENTITY 讓 Derby 自動生成遞增主鍵。手動 INSERT 時主鍵欄位用 DEFAULT 關鍵字。

步驟二:建立兩個專案並建立依賴關係

1. Java SE 專案:TestModelApp

  • 類別:Java Application
  • 專案名:TestModelApp
  • 套件:com.samples.model
  • 主類別:com.samples.model.Main

2. Visual Web 專案:TestWebApp

  • 類別:Web Application → Framework:**Visual Web JavaServer Faces**
  • 專案名:TestWebApp
  • 套件:com.samples.web

3. 專案依賴配置

TestWebApp 右鍵 → Properties → Libraries → Add Project → 選擇 TestModelApp → Add Project JAR Files。使 Web 專案可存取 Model 專案的實體類與控制器。

步驟三:從資料庫生成實體類與持久單元

1. 生成實體類

TestModelApp 專案右鍵 → New → Entity Classes from Database → 選擇 Sample 資料庫連線 → 選取 USERS 表 → 下一步。

2. 建立持久單元

  • 持久單元名:samplePU
  • 交易類型:RESOURCE_LOCAL
  • 提供者:oracle.toplink.essentials.PersistenceProvider(TopLink Essentials)
  • 生成 persistence.xml 於 META-INF

3. 驗證 persistence.xml

雙擊開啟設計視圖,確認:資料庫 URL、驅動程式、用戶名/密碼、管理類別 com.samples.model.Users、密碼欄位正確填寫。

步驟四:配置主鍵生成策略(Dery 專用)

生成的 Users.java 需手動加上主鍵生成註解:


@Entity
public class Users implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 關鍵:Derby IDENTITY 策略
    @Column(name = "USER_ID", nullable = false)
    private Integer userId;
    // ... 其他欄位
}

使用 Fix Imports(Alt+Shift+I)自動匯入 javax.persistence.GeneratedValue 與 GenerationType。

注意:MySQL 使用 auto_increment 時通常不需指定策略,Hibernate 預設即可處理。

步驟五:建立實體控制器

於 com.samples.model 建立 UserController:


public class UserController {
    private EntityManagerFactory emf;

    private EntityManager getEntityManager() {
        if (emf == null) {
            emf = Persistence.createEntityManagerFactory("samplePU");
        }
        return emf.createEntityManager();
    }

    public Users[] getUsers() {
        EntityManager em = getEntityManager();
        try {
            Query q = em.createQuery("select c from Users as c");
            return (Users[]) q.getResultList().toArray(new Users[0]);
        } finally {
            em.close();
        }
    }
}

Fix Imports 匯入 EntityManager、EntityManagerFactory、Persistence。

步驟六:Visual Web 頁面綁定 Table 組件

1. SessionBean1 新增屬性與初始化


private Users[] users;

public Users[] getUsers() { return users; }
public void setUsers(Users[] users) { this.users = users; }

public void updateUsers() {
    UserController uc = new UserController();
    users = uc.getUsers();
}

public void init() {
    super.init();
    try { _init(); } catch (Exception e) { /* 錯誤處理 */ }
    updateUsers(); // 關鍵:初始化時載入資料
}

2. Page1.jsp 拖放 Table 組件綁定

  1. 從 Palette 拖 Table 至設計視圖
  2. 右鍵 Table → Bind to Data
  3. Get Data From 下拉選單選擇 users (SessionBean1)
  4. 確認欄位顯示正確,調整欄寬與標題

3. 部署執行

右鍵 TestWebApp → Run。瀏覽器顯示 Table 組件,資料來自 Users 表三筆測試資料。

關鍵技術點總結

技術點說明
Java SE + Web 專案分離實體與持久邏輯獨立於 Web 層,利於重用與測試
persistence.xmlJPA 必備配置,定義持久單元、資料來源、管理類別
@GeneratedValue(IDENTITY)Derby 主鍵自增策略,必須在實體類手動標註
EntityManager 生命週期每次操作建立關閉,避免長期持有導致連線洩漏
Visual Web 綁定無需 ObjectListDataProvider,直接綁定實體陣列/列表

下篇預告

將示範如何使用 JPA 實作新增、修改、刪除操作,並介紹 Grid Panel 版面控制技巧。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved