菜鳥學SSH(十七)——Hibernate動態模型+JRebel實現動態建立表

來源:互聯網
上載者:User

標籤:style   blog   http   io   os   ar   使用   java   sp   

項目用的是SSH基礎架構,其中有一些資訊很類似,但又不盡相同。如果每一個建一個實體的話,那樣實體會太多,如果分組抽象,然後繼承,又不是特別有規律。鑒於這種情況,就打算讓使用者自己配置要添加的欄位,然後產生對應的表。


需要動態配置的部分執行個體:



只是一小部分,一個一個組合起來大概有三百多。每一項對應一個實體,顯然不好,就算是按照規律歸歸類還是有不少,於是就想到了在運行期來確定這些東西。開始有嘗試過動態編譯產生實體類,後來發現在資料存取上都存在問題,因為是後來產生的,所以只能用反射來擷取,這樣一來無法事先確定類型,也就沒法用注入的方式接收前端傳過來的資料,也不能向前端提供資料了。後來決定用Hibernate的動態模型來處理這個問題,可能有的人不是很瞭解Hibernate的動態模型,下面我們就來介紹一下。


我們通常用實體類來跟表進行映射,當我們需要一個user表的時候,通常都需要寫一個類似下面的實體類:

public class User {private Long id;private String name;private String password;// setter、getter...}

然後用設定檔或註解來描述映射關係,如果使用動態模型的話,則不需要編寫實體類,只需要寫一個設定檔即可:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><!-- 此處不需要類名,和包名 -->  <class entity-name="User"><id name="id" type="java.lang.Long" column="ID"><generator class="native"/></id><property name="name" type="java.lang.String" column="name"/><property name="password" type="java.lang.String" column="password"/></class></hibernate-mapping>

然後通過Map進行操作:

session.beginTransaction();//通過Map映射實體與資料庫Map user = new HashMap();user.put("name", "動態模型");user.put("password", "123456");session.save("User", user);session.getTransaction().commit();session.close();

發出的SQL語句:insert into User (name, password) values (?, ?)


有人說動態映射存入資料很方便, 但是從資料取出資料好像比較難處理,其實這個問題可以通過事先做好約定來解決。


上一篇部落格介紹了JRebel,它可以讓Tomcat支援熱部署。JRebel+Hibernate動態模型雙劍合璧,就可以實現我們動態建表的要求了。


在Spring的設定檔中加入:

<property name="mappingLocations">  <list>  <value>classpath:/com/tgb/entitycfg/*.hbm.xml</value>  </list>  </property>

採用萬用字元來配置hbm.xml檔案,就是為了相容運行期產生的動態模型設定檔,而JRebel可以檢測到設定檔的變化,從而將新增的配置載入進來,需要說明的是JRebel的動態載入屬於懶載入,即在你用到修改的東西是,才會將你修改的內容重新載入進來。


我也是初次使用Hibernate動態模型,目前也算是嘗試階段吧,如果各位誰用過或者對動態模型感興趣歡迎留言交流。



菜鳥學SSH(十七)——Hibernate動態模型+JRebel實現動態建立表

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.