Jakarta EE(基于 JPA)在 IntelliJ IDEA 中開發簡單留言板應用的實驗指導

Jakarta EE(基于 JPA)在 IntelliJ IDEA 中開發簡單留言板應用的實驗指導

? ? ? ?摘要:Jakarta EE 并不僅限于使用 H2 數據庫,它支持任何符合 JDBC 或 JPA 標準的數據庫,例如 MySQL、PostgreSQL、Oracle 等。H2 通常用于開發測試或嵌入式場景,因為它輕量且易配置,但生產環境往往選擇更健壯的數據庫如 MySQL。同樣,.NET 開發可以使用 MySQL(通過 MySQL Connector/NET),但它也支持 SQL Server、SQLite 等多種數據庫,并不局限于 MySQL。

? ? ? ?下面我為你提供一個使用 Jakarta EE(基于 JPA)在 IntelliJ IDEA 中開發簡單留言板應用的步-by-step 指南。這個應用會使用 H2 數據庫(文件模式,以持久化數據),通過一個 JSP 表單提交留言,并使用 EntityManager 將內容寫入 H2。假設你使用 IntelliJ IDEA Ultimate 版(Community 版不支持 Jakarta EE,需要 Ultimate),并已安裝 JDK 17+ 和 Maven。

步驟 1: 創建 Jakarta EE 項目

1. 打開 IntelliJ IDEA,選擇 File > New > Project。

2. 在 New Project 對話框中,選擇 Jakarta EE。

3. 項目名稱設為 MessageBoardApp,選擇 Maven 作為構建工具,JDK 選 17 或更高。

4. 在 Version 字段選擇 Jakarta EE 10 或 11,選擇 Web application模板,并確保包括 Servlet?和 JPA規范(如果沒有,稍后手動添加)。

5. 點擊 Create。IntelliJ 會生成項目結構,包括 pom.xml和基本文件。

步驟 2: 添加依賴

打開 pom.xml,添加以下依賴(H2 驅動、Hibernate 作為 JPA 實現,如果你用 EclipseLink 可以替換)。使用 Alt+Insert(Windows)或 ?N(macOS)添加依賴,然后加載 Maven 變更。

<dependencies><!-- Jakarta EE API --><dependency><groupId>jakarta.platform</groupId><artifactId>jakarta.jakartaee-api</artifactId><version>10.0.0</version> <!-- 或 11.0.0,根據你的 Jakarta EE 版本 --><scope>provided</scope></dependency><!-- Hibernate JPA 實現 --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>6.4.0.Final</version> <!-- 最新版本 --></dependency><!-- H2 數據庫 --><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>2.3.232</version> <!-- 最新版本 --></dependency>
</dependencies>

步驟 3: 配置持久化單元 (persistence.xml)

? ? ? ?在 src/main/resources/META-INF目錄下創建 persistence.xml(如果不存在,右鍵 META-INF > New > XML Configuration File > persistence.xml)。

? ? ? ?使用以下配置(文件模式 H2,數據保存在項目根目錄下的 `messageboard.db` 文件中;自動創建表):

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="3.0" xmlns="https://jakarta.ee/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd"><persistence-unit name="MessageBoardPU" transaction-type="RESOURCE_LOCAL"><provider>org.hibernate.jpa.HibernatePersistenceProvider</provider><class>com.example.entity.Message</class> <!-- 稍后創建的實體類 --><properties><property name="jakarta.persistence.jdbc.driver" value="org.h2.Driver"/><property name="jakarta.persistence.jdbc.url" value="jdbc:h2:./messageboard"/><property name="jakarta.persistence.jdbc.user" value="sa"/><property name="jakarta.persistence.jdbc.password" value=""/><property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/><property name="hibernate.hbm2ddl.auto" value="update"/> <!-- 自動更新 schema --><property name="hibernate.show_sql" value="true"/> <!-- 顯示 SQL 日志,便于調試 --></properties></persistence-unit>
</persistence>

步驟 4: 創建留言實體類 (Message)

在 src/main/java下創建包com.example.entity,然后新建類Message.java:

package com.example.entity;import jakarta.persistence.*;
import java.time.LocalDateTime;@Entity
@Table(name = "messages")
public class Message {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(nullable = false)private String content;@Columnprivate LocalDateTime timestamp = LocalDateTime.now();// Getter 和 Setterpublic Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public LocalDateTime getTimestamp() {return timestamp;}public void setTimestamp(LocalDateTime timestamp) {this.timestamp = timestamp;}
}

步驟 5: 創建 Servlet 處理留言提交

在 src/main/java下創建包com.example.servlet,新建類 MessageServlet.java:

package com.example.servlet;

package com.example.servlet;import com.example.entity.Message;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet("/postMessage")
public class MessageServlet extends HttpServlet {private EntityManagerFactory emf;@Overridepublic void init() {emf = Persistence.createEntityManagerFactory("MessageBoardPU");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String content = req.getParameter("content");if (content != null && !content.isEmpty()) {EntityManager em = emf.createEntityManager();em.getTransaction().begin();Message message = new Message();message.setContent(content);em.persist(message);em.getTransaction().commit();em.close();}resp.sendRedirect("/index.jsp"); // 重定向回首頁}@Overridepublic void destroy() {if (emf != null) {emf.close();}}
}

這個 Servlet 接收 POST 請求,將留言持久化到 H2。

步驟 6: 創建 JSP 表單修改 src/main/webapp/index.jsp:jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>留言板</title>
</head>
<body><h1>歡迎留言</h1><form action="/postMessage" method="post"><textarea name="content" placeholder="輸入你的留言"></textarea><br><button type="submit">提交</button></form>
</body>
</html>

步驟 7: 配置并運行應用服務器按 Ctrl+Alt+S 打開 Settings,選擇 Build, Execution, Deployment > Application Servers

添加 Tomcat(推薦簡單 web app)或 GlassFish,指定安裝路徑。

在 Run Configurations 中添加 Tomcat/GlassFish Local 配置,部署你的 WAR artifact。

運行應用,訪問 http://localhost:8080/(端口依服務器而定)。

提交留言后,數據會寫入 H2 的 messageboard.db 文件。

步驟 8: 在 IntelliJ 中查看 H2 數據庫打開 Database 工具窗口(View > Tool Windows > Database)

點擊 + > Data Source > H2。

URL 設為 jdbc:h2:./messageboard(項目根目錄),用戶 sa,無密碼。

測試連接,成功后可瀏覽表和數據。

? ? ? ?如果運行時遇到問題,如類未找到,確保 Maven 依賴已加載,并重啟 IntelliJ。留言提交后,刷新數據庫查看寫入的內容。如果想添加讀取留言功能,可以在 JSP 中使用 EntityManager 查詢并顯示列表。

8. IntelliJ IDEA(以下簡稱IDEA)中“沒有JPA”怎么辦?

? ? ? ? IntelliJ IDEA(以下簡稱IDEA)中“沒有JPA”通常是因為: - 你使用的是Community版(免費版),它不支持Jakarta EE規范(如JPA、Servlet等)的內置模板和Facet(功能模塊)。需要升級到Ultimate版(付費版)才能獲得完整支持。 - 項目未正確配置Facet或依賴。 下面是添加JPA支持的步驟。根據你的情況選擇方法。我假設你是用Maven構建的項目(如之前的留言板示例),并已安裝JDK 17+。

方法1: 如果使用IDEA Ultimate版(推薦,內置支持)

1. 檢查/升級IDEA版本: - 打開IDEA,點擊 **Help > About** 查看版本。如果是Community版,下載Ultimate版(試用30天免費)從官網:https://www.jetbrains.com/idea/download/。

- Ultimate版支持Jakarta EE,包括JPA的代碼補全、實體生成、數據庫集成等。

2. 在現有項目中添加JPA Facet:

- 右鍵項目根目錄 > Open Module Settings(或按 F4)。

- 在左側選擇 Facets。

- 點擊 +?> 選擇 JPA。

- 在JPA Facet配置中,選擇Hibernate作為默認實現(或EclipseLink),并指向你的persistence.xml文件(位于src/main/resources/META-INF)。

- 點擊 Apply > OK。

- IDEA會自動下載所需插件/依賴,并啟用JPA功能(如實體類注解高亮、JPQL查詢支持)。

3. 如果項目是從頭創建: - 如之前所述,選擇 New > Project > Jakarta EE時,確保勾選 JPA規范。IDEA會自動生成Facet和基本配置。

方法2: 如果使用IDEA Community版(手動添加依賴,無Facet支持) Community版不支持Facet,但你可以通過Maven手動添加JPA依賴,代碼仍能運行(只是缺少一些IDE增強功能,如自動代碼生成)。

1. 添加Maven依賴:

- 打開pom.xml,添加以下(如果已添加,可跳過):

<dependencies><!-- Jakarta EE API (包括JPA) --><dependency><groupId>jakarta.platform</groupId><artifactId>jakarta.jakartaee-api</artifactId><version>10.0.0</version> <!-- 或11.0.0 --><scope>provided</scope></dependency><!-- JPA實現 (如Hibernate) --><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>6.4.0.Final</version> <!-- 檢查最新版本 --></dependency>
</dependencies>

- 右鍵pom.xml?> Maven > Reload Project以加載依賴。

- IDEA會下載jar包,你可以使用JPA注解(如@Entity、@Id)編寫代碼,但不會有時自動補全或驗證。

2. 手動配置persistence.xml:

- 如之前響應所述,在`src/main/resources/META-INF創建persistence.xml,配置H2連接。

3. 啟用插件(可選增強):

- 打開 File > Settings > Plugins,搜索并安裝“Database Tools and SQL”(Community版可用),以支持數據庫瀏覽(如H2查看)。

- 對于JPA代碼補全,Community版有限制,但基本注解會工作。

測試JPA是否添加成功

- 在實體類(如Message.java)中添加`@Entity`注解,如果無報錯且有高亮,則成功。

- 運行應用,提交留言,檢查H2數據庫是否寫入數據(用Database工具窗口連接jdbc:h2:./messageboard)。

- 如果遇到“ClassNotFoundException”或依賴問題,重啟IDEA或運行mvn clean install。

? ? ? ?如果你的IDE是其他(如Eclipse),或具體錯誤截圖,請提供更多細節。如果是拼寫錯誤或其他含義,再解釋一下。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/95812.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95812.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95812.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Gitea:輕量級的自托管Git服務

歡迎光臨我的個人博客查看最新文章&#xff1a;rivers blog 在當今的軟件開發世界中&#xff0c;代碼托管平臺是必不可少的工具。而對于尋求自主控制和數據隱私的團隊與開發者來說&#xff0c;Gitea提供了一個完美的解決方案。 1、 Gitea簡介 Gitea&#xff08;發音為ɡ??ti…

深度學習-----簡單入門卷積神經網絡CNN的全流程

&#xff08;一&#xff09;卷積神經網絡&#xff08;CNN&#xff09;的核心思想傳統全連接網絡的缺陷圖像平鋪展開后&#xff0c;旋轉或位置變化會導致輸入差異大&#xff0c;難以識別舉例&#xff1a;手寫數字“8”在不同位置或旋轉后的識別困難&#xff08;圖像在計算機中是…

Scikit-learn Python機器學習 - 特征降維 壓縮數據 - 特征選擇 - 單變量特征選擇 SelectKBest - 選擇Top K個特征

鋒哥原創的Scikit-learn Python機器學習視頻教程&#xff1a; 2026版 Scikit-learn Python機器學習 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 課程介紹 本課程主要講解基于Scikit-learn的Python機器學習知識&#xff0c;包括機器學習概述&#xff0c;特征工程(數據…

Datawhale AI夏令營復盤[特殊字符]:我如何用一個Prompt,在Coze Space上“畫”出一個商業級網頁?

文章摘要 本文詳細記錄了我在Datawhale AI夏令營期間&#xff0c;如何另辟蹊徑&#xff0c;使用Coze&#xff08;扣子空間&#xff09;和精心設計的Prompt&#xff0c;從零開始構建一個專業的“智能SEO Agent”產品網頁的完整過程。文章將完整展示我編寫的“萬字”級Prompt&…

SVN和Git兩種版本管理系統對比

一、SVN&#xff08;Subversion&#xff09;簡介SVN是一種集中式版本控制系統。它有一個中心倉庫&#xff08;repository&#xff09;&#xff0c;所有的代碼變更都記錄在這個中心倉庫中。每個開發者從中心倉庫檢出&#xff08;checkout&#xff09;代碼到本地工作副本&#xf…

【機器學習】綜合實訓(一)

項目一 鳶尾花分類該項目需要下載scikit-learn庫&#xff0c;下載指令如下&#xff1a;pip install scikit-learn快速入門示例&#xff1a;鳶尾花分類# 導入必要模塊 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklea…

vulhub通關筆記1—docker unauthorized-rce

1.docker unauthorized-rce 基本情況 docker swarm是一個將docker集群變成單一虛擬的docker host工具&#xff0c;使用標準的Docker API&#xff0c;能夠方便docker集群的管理和擴展&#xff0c;由docker官方提供&#xff1a; 需要在每臺機器上安裝docker&#xff0c;并且運行…

zotero擴容

最近出差&#xff0c;想要把本地的主機上的文件同步到筆記本&#xff0c;發現zotero不夠用&#xff0c;然后尋找了一些zotero擴容的方法&#xff0c;這里記錄一下&#xff0c;方便以后查閱。 zotero擴容創建賬戶登錄賬戶進一步擴容設置Apps Connection設置zoterozotero自帶同步…

Kafka基礎理論

Kafka概述 kafka是一個分布式的基于發布/訂閱模式的消息隊列&#xff0c;主要用于大數據實時處理領域。kafka采取了發布/訂閱模式&#xff0c;消息的發布者不會將消息直接發送給特定的訂閱者&#xff0c;而是將發布的消息分為不同的類別&#xff0c;訂閱者只接受感興趣的消息。…

蒼穹外賣項目實戰(day-5完整版)-記錄實戰教程及問題的解決方法

Redis基本操作及下載安裝包&#xff08;Redis及可視化工具&#xff09;&#xff0c;都在我的上一篇文章&#xff1a;Redis基本知識及簡單操作&#xff0c;這里不再贅述 店鋪營業狀態修改功能 &#xff08;1&#xff09;需求分析與設計 &#xff08;2&#xff09;SpringDataRe…

第R8周:RNN實現阿爾茲海默病診斷

數據集包含2149名患者的廣泛健康信息&#xff0c;每名緩則的ID范圍從4751到6900不等&#xff0c;該數據集包含人口統計詳細信息&#xff0c;生活方式因素、病史、臨床測量、認知和功能評估、癥狀以及阿爾茲海默癥的診斷。 一、準備工作 1、硬件準備 import numpy as np import …

MySQL復制技術的發展歷程

在互聯網應用不斷發展的二十多年里&#xff0c;MySQL 一直是最廣泛使用的開源關系型數據庫之一。它憑借開源、輕量、靈活的優勢&#xff0c;支撐了無數網站、移動應用和企業系統。支撐 MySQL 長期發展的關鍵之一&#xff0c;就是 復制&#xff08;Replication&#xff09;技術。…

C++從字符串中移除前導零

該程序用于去除字符串開頭的零字符。當輸入"0000123456"時&#xff0c;程序會輸出"123456"。核心函數removeZero()通過while循環找到第一個非零字符的位置&#xff0c;然后使用erase()方法刪除前面的所有零。主函數讀取輸入字符串并調用該函數處理。程序簡…

【面試題】C++系列(一)

本專欄文章持續更新&#xff0c;新增內容使用藍色表示。C面向對象的三大特性&#xff1a;封裝&#xff0c;繼承&#xff0c;多態&#xff08;1&#xff09;封裝是將數據和函數組合到一個類里。主要目的是隱藏內部的實現細節&#xff0c;僅暴露必要的接口給外部。通過封裝&#…

當沒辦法實現從win復制東西到Linux虛擬機時的解決辦法

① 先確認是否已安裝bash復制sudo apt list --installed | grep open-vm-tools如果 沒有任何回顯 → 沒裝&#xff0c;跳到 ③如果看到 open-vm-tools 已安裝 → 繼續 ②② 啟動正確的服務&#xff08;單詞別打錯&#xff09;bash復制systemctl status vmtoolsd # 查看…

用Markdown寫自動化用例:Gauge實戰全攻略!

你作為一名自動化測試工程師&#xff0c;正在為一個復雜的Web應用編寫測試腳本&#xff1a;傳統工具要求寫大量代碼&#xff0c;維護起來像解謎游戲&#xff0c;團隊非技術成員完全插不上手。這時&#xff0c;Gauge這個“自動化神器”如魔法般出現——它允許用Markdown寫可讀的…

Unity開發保姆級教程:C#腳本+物理系統+UI交互,3大模塊帶你通關游戲開發

文章目錄基礎概念Unity開發環境搭建版本選擇&#xff1a;為什么2021 LTS是最佳起點&#xff1f;三步安裝&#xff1a;從下載到項目創建界面認知&#xff1a;5分鐘掌握核心操作區配置優化&#xff1a;讓開發更順暢驗證環境&#xff1a;創建你的第一個CubeC#基礎語法與Unity腳本結…

Depth Anything V2論文速讀

這篇論文主要講了兩方面1.為了解決模型在正常標注的現實圖像上訓練的缺陷問題、提出了新的模型訓練數據和訓練方法真實標記圖像存在缺點&#xff1a;標簽噪聲&#xff08;深度傳感器可能存在空洞、玻璃等物體反射導致精度不準確&#xff09;、標簽細節粗糙&#xff08;深度圖邊…

數據庫原理及應用_數據庫管理和保護_第5章數據庫的安全性_理論部分

前言 "<數據庫原理及應用>(MySQL版)".以下稱為"本書"中第5章前6節內容 引入 數據庫的安全性是非常重要的,表現在兩個方面:一數據的訪問權限,二數據的物理安全.本書在這一章前6節基本上都是理論性的內容,選擇其中重要部分進行解讀. 5.1數據庫安全性…

QT6 配置 Copilot插件

下載項目&#xff1a;解壓 GitHub - github/copilot.vim: Neovim plugin for GitHub Copilot Node.js必須安裝 Node.js — Download Node.js 例如先安裝一個qt6 ,qt Cteatror選擇新版本的 設置 效果&#xff0c;注釋里面寫要求&#xff0c;tab同意 #include "mainwindow…