當前位置:首頁 » 操作系統 » hibernate源碼

hibernate源碼

發布時間: 2025-02-11 04:11:17

① 關於spring整合hibernate的時候自動創建表的問題

<prop key="hibernate.hbm2ddl.auto">update</prop>
漏了"hibernate",若沒寫全會被框架認為沒配置,所以不會導出schema;

關於update和create:
(1)update 但schema發生改變時進行更新,比如添加欄位,保留原有數據;
(2)create 每次運行重新創建schema,如果表存在,先刪除再創建,原有數據丟失;
update也會創建表,以下是配置>update<執行的代碼(hibernate的源碼):
if ( table.isPhysicalTable() ) {

TableMetadata tableInfo = databaseMetadata.getTableMetadata(
table.getName(),
( table.getSchema() == null ) ? defaultSchema : table.getSchema(),
( table.getCatalog() == null ) ? defaultCatalog : table.getCatalog(), table.isQuoted()
);
if ( tableInfo == null ) {
script.add(
table.sqlCreateString(
dialect,
mapping,
defaultCatalog, defaultSchema
)
);
}
else {
Iterator<String> subiter = table.sqlAlterStrings(
dialect,
mapping,
tableInfo,
defaultCatalog,
defaultSchema
);
while ( subiter.hasNext() ) {
script.add( subiter.next() );
}
}

Iterator<String> comments = table.sqlCommentStrings( dialect, defaultCatalog, defaultSchema );
while ( comments.hasNext() ) {
script.add( comments.next() );
}

}
}

表若不存在,也會被創建.

② nhibernate是如何自動生成sql語句的

NHibernate 查看生成的sql語句:
其實就是Interceptor的應用, 源碼中Interceptor的默認實現是EmptyInterceptor,
[Serializable]
public class EmptyInterceptor : IInterceptor
{ //前面省略n行代碼
public SqlString OnPrepareStatement(SqlString sql)
{
return sql;
}
} public class MyInterceptor : EmptyInterceptor
{
public override NHibernate.SqlCommand.SqlString OnPrepareStatement(NHibernate.SqlCommand.SqlString sql)
{
return base.OnPrepareStatement(sql);
}
} 我們要做的就是繼承EmptyInterceptor,重寫OnPrepareStatement()方法,重寫方法裡面就是你大展拳腳的地方了,
想寫文件寫文件,想輸出到頁面就輸出到頁面,什麼都不做都可以,如上
怎麼用呢?
public override void Update(Admin entity)
{
ISession session = HibernateTemplate.SessionFactory.OpenSession(new MyIntercepotr);
session.Update(entity);
session.Flush();
}
在你想要查看的操作中,打開session 的時候添加上自定義的攔截器就可以了,想給所有的操作都配置的話就要用到全局配置文件了。
重寫OnPrepareStatement()的時候一句話都不改,我只是在這里打一個斷點而已,只要看看生成的sql語句就行了,然後去修改配置文件再來debug,確認怎麼配置生產的sql最優。

用LinqPad查看Nhibernate生成的sql語句
使用Nhibernate開發一般都要對Nhibernate生成的sql語句進行查看及分析,查看Nhibernate生成的sql語句,可以使用NHProfiler和log4net。但NHProfiler是要付費的(當然,在天朝,你懂的……),用log4net配置比較麻煩。今天在網上查看Linq to Nhibernate資料的時候發現了一個工具LinqPad,於是又找了相關資源,發現它還真能實現Nhibenate語句的查看。廢話少說,看下面的使用方法吧!
1、 下載LinqPad,地址:http://www.linqpad.net/
2、 配置LinqPad,運行LinqPad,在菜單里選擇Query—>Query Propeties;在選項卡中Additional References,點擊「Browse…」按鈕,選擇項目中必要的Dll。
Dll包括:資料庫驅動dll,實體映射dll(圖中的Entity),nhibernate相關的dll

③ hibernate session.save()怎麼實現底層代碼怎麼看求告訴

不得不說,你截圖里的這個箭頭指的很帥!


我來解答一下,你先在你的代碼裡面,有session.save(obj)調用的地方,按下Ctrl鍵,然後把滑鼠移動到save上(注意不要點下去),會出現一個小菜單,如下圖:

看到沒,上面的注釋里說的,save() operations,這里的三個方法之間的調用關系,就說明這三個方法就是hibernate的session.save(obj)方法的實現所做的操作了。


不過真心不明白你看這個代碼做什麼,如果是你保存不成功的話,一般hibernate這種老牌框架是不會出問題的,原因在你自己代碼上;如果你想研究hibernate源代碼,進而自己寫一個ORM框架,算我沒說。

④ Hibernate官網下載

Hibernate官網下載地址是:[Hibernate官網下載頁面鏈接]。

Hibernate是一個開源的Java對象關系映射(ORM)框架,它提供了Java應用程序與關系型資料庫之間的映射功能,使得Java開發者可以使用面向對象的方式來操作資料庫。Hibernate通過配置文件和註解來映射Java對象與資料庫表之間的關系,使得開發者無需編寫繁瑣的SQL語句就可以完成數據的增刪改查操作。

在Hibernate的官網上,你可以找到Hibernate的最新版本下載鏈接。通常,Hibernate會提供兩個版本的下載:一個是包含完整源代碼的版本,另一個是只包含編譯後的JAR文件的版本。你可以根據自己的需求選擇適合的版本進行下載。

下載Hibernate後,你需要將其添加到你的Java項目中,並配置相關的配置文件。配置文件通常包括hibernate.cfg.xml和hbm.xml文件。hibernate.cfg.xml文件用於配置Hibernate的全局信息,如資料庫連接信息、方言等;而hbm.xml文件則用於配置Java對象與資料庫表之間的映射關系。

一旦配置完成,你就可以在你的Java代碼中使用Hibernate提供的API來操作資料庫了。例如,你可以使用SessionFactory類創建Session對象,然後通過Session對象來執行資料庫操作。Hibernate的API提供了豐富的功能,如事務管理、查詢語句構建等,使得開發者能夠更加方便地操作資料庫。

總之,通過訪問Hibernate的官網並下載適合的版本,你可以輕松地將Hibernate集成到你的Java項目中,並利用其強大的ORM功能來簡化資料庫操作。記得在下載和使用Hibernate時,查閱官方文檔以獲取更詳細的使用說明和最佳實踐建議。

⑤ hibernate是什麼

Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱資料庫。 Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序使用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。
Hibernate的核心類和介面一共有6個,分別為:Session、SessionFactory、
Transaction、Query、Criteria和Configuration。這6個核心類和介面在任何開發中都會用到。通過這些介面,不僅可以對持久化對象進行存取,還能夠進行事務控制。
Session:
Session介面負責執行被持久化對象的CRUD操作(CRUD的任務是完成與資料庫的交流,包含了很多常見的SQL語句)。但需要注意的是Session對象是非線程安全的。同時,Hibernate的session不同於JSP應用中的HttpSession。這里當使用session這個術語時,其實指的是Hibernate中的session,而以後會將HttpSession對象稱為用戶session。
SessionFactory:
SessionFactory介面負責初始化Hibernate。它充當數據存儲源的代理,並負責創建Session對象。這里用到了工廠模式。需要注意的是SessionFactory並不是輕量級的,因為一般情況下,一個項目通常只需要一個SessionFactory就夠,當需要操作多個資料庫時,可以為每個資料庫指定一個SessionFactory。
Transaction:
Transaction 介面是一個可選的API,可以選擇不使用這個介面,取而代之的是Hibernate 的設計者自己寫的底層事務處理代碼。 Transaction 介面是對實際事務實現的一個抽象,這些實現包括JDBC的事務、JTA 中的UserTransaction、甚至可以是CORBA 事務。之所以這樣設計是能讓開發者能夠使用一個統一事務的操作界面,使得自己的項目可以在不同的環境和容器之間方便地移植。
Query:
Query介面讓使用者方便地對資料庫及持久對象進行查詢,它可以有兩種表達方式:HQL語言或本地資料庫的SQL語句。Query經常被用來綁定查詢參數、限制查詢記錄數量,並最終執行查詢操作。
Criteria:
Criteria介面與Query介面非常類似,允許創建並執行面向對象的標准化查詢。值得注意的是Criteria介面也是輕量級的,它不能在Session之外使用。
Configuration:
Configuration 類的作用是對Hibernate 進行配置,以及對它進行啟動。在Hibernate 的啟動過程中,Configuration 類的實例首先定位映射文檔的位置,讀取這些配置,然後創建一個SessionFactory對象。雖然Configuration 類在整個Hibernate 項目中只扮演著一個很小的角色,但它是啟動hibernate 時所遇到的第一個對象。

熱點內容
sql2000質疑 發布:2025-02-11 14:52:21 瀏覽:520
se94se頁面訪問升級版 發布:2025-02-11 14:49:42 瀏覽:804
java是否包含字元串 發布:2025-02-11 14:45:24 瀏覽:51
聚寶齋腳本 發布:2025-02-11 14:35:00 瀏覽:971
地址管理編輯伺服器信息 發布:2025-02-11 14:34:10 瀏覽:788
虎牙直播什麼配置 發布:2025-02-11 14:32:29 瀏覽:619
修改linux的時間 發布:2025-02-11 14:32:28 瀏覽:205
編程做古詩 發布:2025-02-11 14:31:36 瀏覽:308
以程序存儲和 發布:2025-02-11 14:25:20 瀏覽:468
金荷娜解壓碼 發布:2025-02-11 14:21:15 瀏覽:716