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

Hibernate 3 學習筆記(十三):動態模型 - 無 POJO 開發

     編輯:Java 相關知識

動態模型適用場景

  • 專案初期需求頻繁變動,POJO 欄位增減快。
  • 通用後台管理系統,實體結構由使用者配置。
  • 快速原型開發,避免頻繁修改 Java 類別與映射檔。

核心概念:用 Map 取代 POJO

不寫 User.java,直接用 Map<String, Object> 承載資料,映射檔以 entity-name 識別實體。

映射檔:<class entity-name="...">

<class entity-name="com.hb3.pack_06.model.DynamicUserModel" table="user">
    <id name="id" column="id" type="java.lang.Integer">
        <generator class="native"/>
    </id>
    <property name="name" column="name" type="java.lang.String"/>
    <property name="age" column="age" type="java.lang.Integer"/>
</class>
  • entity-name:唯一識別符,取代類別全名,不可重複。
  • name 屬性對應 Map 的 Key。

程式碼操作:Session API 的字串重載方法

儲存

Map<String, Object> userMap = new HashMap<>();
userMap.put("name", "shenbin");
userMap.put("age", 28);

session.save("com.hb3.pack_06.model.DynamicUserModel", userMap);

載入

userMap = (Map) session.load(
    "com.hb3.pack_06.model.DynamicUserModel", 1);
System.out.println(userMap.get("name"));
System.out.println(userMap.get("age"));

查詢 (HQL)

Query q = session.createQuery("from com.hb3.pack_06.model.DynamicUserModel");
List<Map> list = q.list(); // 回傳 List

進階:動態模型也支援關聯與集合

Map 的 Value 可以是另一個 Map(多對一)、List<Map>(一對多)等,映射檔同樣用 entity-name 參考。

優缺點權衡

優點缺點
無需編譯 Java 類別,熱部署友善失去型別安全,編譯期無法發現拼字錯誤
適合高度動態的資料結構IDE 自動完成、重構支援缺失
減少樣板代碼效能略低於 POJO(反射/Map 操作開銷)
可與 POJO 混用除錯困難,堆疊追蹤無類別名

建議

**僅在原型階段或極度動態場景使用**。正式專案建議轉為 POJO + 映射檔/註解,獲得型別安全與維護性。

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