本系列將手把手帶你從零構建一個經典的 Java Web 留言板系統。首篇聚焦資料庫結構設計與POPO(Plain Old Java Object)實體類別,為後續的 DAO、Service、Controller、JSP/JSTL 視圖層打下堅實基礎。
留言板核心業務:主題貼文、回覆貼文、用戶。採用「自關聯」設計,單表儲存主題與回覆,透過 parent_id 區分層級。

| 欄位 | 型別 | 說明 |
|---|---|---|
| id | INT PK AUTO_INCREMENT | 主鍵 |
| parent_id | INT | 父貼文 ID,0 表示主題貼 |
| user_id | INT | 發文用戶 FK |
| title | VARCHAR(200) | 主題標題(回覆可為空) |
| content | TEXT | 貼文內容 |
| post_time | DATETIME | 發文時間 |
| status | TINYINT | 狀態:1 正常、0 刪除 |
| 欄位 | 型別 | 說明 |
|---|---|---|
| id | INT PK AUTO_INCREMENT | 主鍵 |
| username | VARCHAR(50) | 唯一用戶名 |
| password | VARCHAR(100) | 加密密碼 |
| VARCHAR(100) | 信箱 | |
| reg_time | DATETIME | 註冊時間 |
對應上述兩張表,建立 Message 與 User 類別,遵循 JavaBean 規範,含無參建構子、私有屬性、公共 getter/setter,並實現 Serializable 便於 Session 傳遞。
public class Message implements Serializable {
private Integer id;
private Integer parentId; // 0 = 主題貼
private Integer userId;
private String title;
private String content;
private Date postTime;
private Integer status;
// 關聯對象(非 DB 欄位,Service 層組裝)
private User user; // 發文用戶詳情
private List<Message> replies; // 子回覆列表
// getter/setter 略
// equals/hashCode 基於 id 實現
}
public class User implements Serializable {
private Integer id;
private String username;
private String password;
private String email;
private Date regTime;
// getter/setter 略
}
parent_id=0 為根節點,>0 為回覆,支援無限層級巢狀回覆。status 欄位而非物理刪除,保留資料完整性。user、replies 不映射 DB 欄位,由 Service 層組裝,避免 ORM 過度抓取。java.util.Date,DAO 層處理 Timestamp 轉換。下一篇將實作 MessageDAO 與 UserDAO,採用 JDBC Template 封裝 CRUD,敬請期待。