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

JFinal getModel 方法詳解與資料庫儲存陷阱避坑指南

     編輯:Java 綜合教學

JFinal getModel 方法詳解與資料庫儲存陷阱避坑指南

JFinal 的 getModel 是從表單綁定資料到 Model 物件的核心方法,但官方文檔中關於「查詢用 dao 物件」與「資料承載用新物件」的區別,是新手最容易踩坑的地方。本文詳細記錄配置流程與避坑經驗。

環境配置

在 JConfig.configPlugin 中設定資料庫連線與表映射:

public void configPlugin(Plugins me) {
    C3p0Plugin cp = new C3p0Plugin(
        "jdbc:mysql://localhost:3306/huaxuetang?useUnicode=true&characterEncoding=utf-8",
        "root", "1234");
    me.add(cp);
    
    ActiveRecordPlugin arp = new ActiveRecordPlugin(cp);
    arp.setShowSql(true);
    me.add(arp);
    
    // 表映射:表名、主鍵、Model 類別
    arp.addMapping("bse_user", "id", User.class);
    arp.addMapping("grade_one_choice", "id", GOneQuestion.class);
}

Model 類別定義

public class GOneQuestion extends Model<GOneQuestion> {
    private static final long serialVersionUID = 1L;
    // 全域共享 dao 物件,僅供查詢使用
    public final static GOneQuestion questiondao = new GOneQuestion();
}

前端表單命名規則

表單欄位 name 屬性格式:modelName.attributeName(模型名首字母小寫)

<input type="text" name="gOneQuestion.A" class="required" maxlength="50" />

對應 Model 類別 GOneQuestion 的屬性 A。

Controller 獲取 Model

GOneQuestion question = getModel(GOneQuestion.class);

⚠️ 關鍵陷阱:資料儲存必須用新物件

官方文檔原文:User 中定義的 public static final User dao 物件是全域共享的,只能用於資料庫查詢,不能用於資料承載物件。資料承載需要使用 new User().set(…) 來實現。

錯誤寫法(會導致主鍵重複):

// 錯誤:使用靜態 dao 物件儲存
GOneQuestion.questiondao.set("book", question.getStr("book")).save();

正確寫法:

// 正確:new 新物件承載資料
new GOneQuestion()
    .set("book", question.getStr("book"))
    .save();

操作對照表

操作類型使用物件範例
查詢、刪除、更新靜態 dao 物件GOneQuestion.questiondao.findById(id)
新增儲存new Model()new GOneQuestion().set(...).save()

這個細節在官方文檔中雖有說明,但極易被忽略。實務上建議:查詢用靜態 dao,寫入用 new 實例,形成肌肉記憶。

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