實現培訓計劃發布功能,包含標題、發布時間、發布人、內容及最多 3 個附件。為便於管理與查詢,附件信息同步入庫,而非僅存文件系統。
對應資料庫表 KS_TRAINPLAN,採用標準 JavaBean 規範:私有屬性 + 公共 Getter/Setter,實現 Serializable 支援分布式傳輸。
package tester.business.maitain;
public class Trainplan implements java.io.Serializable {
private int p_id; // 主鍵,序列生成
private String p_title; // 計劃標題
private int post_index; // 排序索引
private String issue_time; // 發布時間 (yyyy-MM-dd)
private String issuer; // 發布人
private String p_content; // 正文內容
private String p_accessory; // 附件文件名(單字段存多文件名可用分隔符)
// 標準 Getter/Setter 省略...
public int getP_id() { return p_id; }
public void setP_id(int p_id) { this.p_id = p_id; }
public String getP_title() { return p_title; }
public void setP_title(String p_title) { this.p_title = p_title; }
public int getPost_index() { return post_index; }
public void setPost_index(int post_index) { this.post_index = post_index; }
public String getIssue_time() { return issue_time; }
public void setIssue_time(String issue_time) { this.issue_time = issue_time; }
public String getIssuer() { return issuer; }
public void setIssuer(String issue) { this.issuer = issue; }
public String getP_content() { return p_content; }
public void setP_content(String p_content) { this.p_content = p_content; }
public String getP_accessory() { return p_accessory; }
public void setP_accessory(String p_accessory) { this.p_accessory = p_accessory; }
}
| 維度 | 現狀 | 建議改進 |
|---|---|---|
| 主鍵生成 | 資料庫 Sequence (SEQ_P_ID) | Hibernate @GeneratedValue 或 MyBatis @Options(useGeneratedKeys=true) 統一由框架處理 |
| 時間類型 | String issue_time | 改用 java.time.LocalDate 或 java.util.Date,配合 @Temporal / @JsonFormat 統一格式化 |
| 附件設計 | 單字段存文件名 | 拆分為獨立 TrainPlanAttachment 實體,一對多關聯,支援元數據(大小、類型、上傳時間) |
| 驗證註解 | 無 | 加入 JSR-303 (@NotBlank, @Size, @Future) 實現聲明式驗證 |
Trainplan 實例(組合模式),表單字段映射為 trainPlan.p_title 等巢狀屬性,Struts 自動填充。theFile1/2/3) 獨立定義為 org.apache.struts.upload.FormFile 類型,不屬於業務實體。實體類是領域模型的基石,設計時應高內聚、低耦合、富領域行為,而非單純的資料庫映射容器。