新聞中心
NHibernate是一個(gè)流行的開源對象關(guān)系映射(ORM)框架,它提供了一種簡單的方式來操作數(shù)據(jù)庫,可以快速地將對象映射到數(shù)據(jù)庫表中。NHibernate是在Hibernate之上構(gòu)建的,因此它繼承了Hibernate的所有優(yōu)點(diǎn),并且在Hibernate的基礎(chǔ)上增加了一些新功能和改進(jìn)。

堅(jiān)守“ 做人真誠 · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價(jià)值觀,專業(yè)網(wǎng)站建設(shè)服務(wù)10余年為成都iso認(rèn)證小微創(chuàng)業(yè)公司專業(yè)提供企業(yè)網(wǎng)站建設(shè)營銷網(wǎng)站建設(shè)商城網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)小程序網(wǎng)站建設(shè)網(wǎng)站改版,從內(nèi)容策劃、視覺設(shè)計(jì)、底層架構(gòu)、網(wǎng)頁布局、功能開發(fā)迭代于一體的高端網(wǎng)站建設(shè)服務(wù)。
本文將詳細(xì)介紹如何配置NHibernate數(shù)據(jù)庫連接和映射以及優(yōu)化NHibernate應(yīng)用程序的性能。
一、NHibernate數(shù)據(jù)庫連接
1.1 配置文件
在配置NHibernate數(shù)據(jù)庫連接之前,我們需要在應(yīng)用程序的根目錄下創(chuàng)建一個(gè)名為“hibernate.cfg.xml”的XML配置文件。該文件包含了各種配置屬性,例如用于連接數(shù)據(jù)庫的用戶名、密碼、數(shù)據(jù)庫連接字符串等。
通常,NHibernate配置文件應(yīng)該包含以下屬性:
– 驅(qū)動程序類名:JDBC驅(qū)動程序的類名。
– 數(shù)據(jù)庫連接字符串:指向數(shù)據(jù)庫的URL。
– 用戶名:登錄數(shù)據(jù)庫時(shí)使用的用戶名。
– 密碼:登錄數(shù)據(jù)庫時(shí)使用的密碼。
– 方言:指示NHibernate如何在特定的數(shù)據(jù)庫上生成SQL語句。
下面是一個(gè)示例配置文件:
“`xml
NHibernate.Dialect.MySQLDialect
NHibernate.Driver.MySqlDataDriver
Server=localhost; Database=mydatabase; Uid=myusername; Pwd=mypassword;
“`
1.2 創(chuàng)建SessionFactory
SessionFactory是一個(gè)線程安全的對象,它可以創(chuàng)建Session對象。Session是與數(shù)據(jù)庫連接相關(guān)的最主要的類之一。在應(yīng)用程序中使用NHibernate時(shí),通常只需要創(chuàng)建一個(gè)SessionFactory實(shí)例。
以下是創(chuàng)建SessionFactory的代碼示例:
“`csharp
var sessionFactory = new NHibernate.Cfg.Configuration().Configure().BuildSessionFactory();
“`
二、NHibernate映射
2.1 類映射
在使用NHibernate時(shí),我們需要將.NET類映射到數(shù)據(jù)庫表中。這可以通過創(chuàng)建.hbm.xml文件來實(shí)現(xiàn),其中包含了.NET類和數(shù)據(jù)庫表之間的映射規(guī)則。
具體步驟如下:
1. 在.NET代碼中創(chuàng)建一個(gè)類,該類將映射到數(shù)據(jù)庫表。
2. 在應(yīng)用程序根目錄下創(chuàng)建一個(gè)名為“mapping”的文件夾,并在該文件夾中創(chuàng)建一個(gè)名為“MyClass.hbm.xml”的文件。
3. 在文件中定義.NET類和數(shù)據(jù)庫表之間的映射規(guī)則。
下面是一個(gè)示例hbm.xml文件:
“`xml
“`
在這個(gè)示例文件中,我們定義了一個(gè)名為“MyClass”的.NET類,并將其映射到名為“MyTable”的數(shù)據(jù)庫表中。
2.2 查詢映射
NHibernate還提供了一種查詢映射的方式,可以在查詢SQL語句和數(shù)據(jù)庫表之間建立一個(gè)映射關(guān)系。這可以通過在.hbm.xml文件中定義元素來實(shí)現(xiàn)。
以下是一個(gè)示例查詢映射的代碼:
“`xml
SELECT Column1, Column2 FROM MyTable WHERE Id = :id
]]>
“`
三、NHibernate性能優(yōu)化
3.1 預(yù)處理語句
NHibernate可以使用PreparedStatement來執(zhí)行SQL語句,這樣可以提高性能,因?yàn)镻reparedStatement緩存了已經(jīng)執(zhí)行過的SQL語句并重復(fù)使用。
以下是一些性能優(yōu)化的代碼示例:
“`csharp
var session = sessionFactory.OpenSession();
var query = session.CreateQuery(“SELECT * FROM MyClass WHERE Name=:name”);
query.SetParameter(“name”, “John Smith”);
query.List();
“`
在上面的示例中,NHibernate將執(zhí)行預(yù)處理語句,這樣可以加快查詢速度。
3.2 使用緩存
NHibernate還提供了各種緩存機(jī)制,用于提高性能并減少數(shù)據(jù)庫訪問次數(shù)。其中最常見的是第二級緩存,它可以為.NET對象提供持久性,以便它們可以被多個(gè)Session共享。
以下是使用第二級緩存的代碼示例:
“`csharp
var configuration = new Configuration().Configure();
configuration.SetProperty(Environment.UseSecondLevelCache, “true”);
configuration.SetProperty(Environment.CacheProvider, typeof(MyCacheProvider).AssemblyQualifiedName);
var sessionFactory = configuration.BuildSessionFactory();
“`
在這個(gè)代碼示例中,我們指定了NHibernate使用第二級緩存,并設(shè)置了MyCacheProvider作為緩存提供程序。
3.3 批量處理操作
當(dāng)需要在數(shù)據(jù)庫中插入或更新多個(gè)記錄時(shí),NHibernate提供批量處理操作,可以將多個(gè)SQL語句打包成單個(gè)操作,從而提高性能。
以下是批量處理操作的示例代碼:
“`csharp
var session = sessionFactory.OpenSession();
var transaction = session.BeginTransaction();
try
{
for (int i = 0; i
{
var myClass = new MyClass()
{
Property1 = “Value1” + i,
Property2 = “Value2” + i
};
session.SaveOrUpdate(myClass);
}
transaction.Commit();
}
catch (Exception)
{
transaction.Rollback();
}
“`
在這個(gè)示例中,我們使用了一個(gè)循環(huán)將多個(gè)MyClass對象插入到數(shù)據(jù)庫中。由于我們將多個(gè)保存操作打包成了單個(gè)操作,因此性能得到了提高。
相關(guān)問題拓展閱讀:
- 如何基于Hibernate在Java類中實(shí)現(xiàn),根據(jù)數(shù)據(jù)庫表生成持久化類代碼和映射文件hbm.xml
- node cannot be resolved for the specified context 是什么錯(cuò)誤?spring.net + nhibernate配置問題
如何基于Hibernate在Java類中實(shí)現(xiàn),根據(jù)數(shù)據(jù)庫表生成持久化類代碼和映射文件hbm.xml
這者敗首個(gè)很簡單啊,用首數(shù)My Eclipse 里的那個(gè)MyEclipse Database Explorer 就可以實(shí)現(xiàn)反向枯橘生成了啊
這個(gè)就要借助hibernate tools跟伏手xdoclet來完成了;
首先你要在你的java代碼里缺彎嫌應(yīng)用xdoclet標(biāo)簽,例如
Java code
private String name;
/**
* @hibernate.property column = “name” length = “50”
*/
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
其中, column = “name” length = “50”
就是xdoclet標(biāo)簽,它需要xdoclet程序來處理,這里就需要用到hibernate tools。
具體做的話一般情況是建一個(gè)ant腳本來完成,例如:
XML code
++
||
| R U N N I N G H I B E R N A T E D O C L E T |
||
++
上面的代碼是生成hbm跟cfg文件的,下面再介紹如何從java類到數(shù)據(jù)庫:
XML code
++
||
| R U N N I N G D B S C H E M A |
||
++
當(dāng)然ant工程里的一些初始化需要自己定義,我這里只摘錄關(guān)鍵部分,具體的東西請查閱相關(guān)文檔,hibernate tutorail里就有個(gè)例子
沒必要用ant腳本,MyEclipse對Hibernate支持得很好。
具體參照以下:
在hibernate中,每個(gè)數(shù)據(jù)表對應(yīng)的其實(shí)是一個(gè)實(shí)體類,每個(gè)實(shí)體類有一個(gè)對應(yīng)的hbm.xml配置文件和你匹配,myeclipse中其實(shí)有個(gè)MyEclipse Database Explorer視圖,它提供了myeclipse與數(shù)據(jù)庫直接連接的內(nèi)置窗口,并且通過此窗口可以生成hibernate的mapping文件。
1.在項(xiàng)目上點(diǎn)擊右鍵選擇MyEclipse選項(xiàng),為應(yīng)用增加Hibernate特性.
2.在出現(xiàn)的配置窗口中,選中“Add Hibernate 2.1 libraries to project?”,然后設(shè)定存放Hibernate庫文件的目錄為: /WEB-INF/lib 目錄,默認(rèn)會選擇創(chuàng)建一個(gè)新的Hibernate配置文件hibernate.cfg.xml。
3.點(diǎn)擊下一步,進(jìn)入Hibernate數(shù)據(jù)基高拆庫連接配置界面,在Connection Profile選項(xiàng)中直接選擇在MyEclipse Database Explorer中配置的vipdata選項(xiàng),然后就會自動生成其他的配置,可以選擇“Copy JDBC Driver and add to classpath”,這樣就會將JDBC驅(qū)動拷貝到WEB-INF/lib目錄中。:
4.點(diǎn)擊下一步,來創(chuàng)建Hibernate的SessionFactory類,這是一個(gè)簡單的集中管理Hibernate會話的工廠類,填寫類的全名稱。
5.點(diǎn)擊完成,然后MyEclipse就會將Hibernate相關(guān)的jar包拷貝到lib目錄下,同時(shí)會生成Hibernate的配置文件:hibernate.cfg.xml,和SessionFactory類。
現(xiàn)在要利用MyEclipse Database Explorer視圖中的工具來生成Hibernate的映射文件。切換到MyEclipse Database Explorer視圖,在表vipdata上點(diǎn)擊右鍵,選擇Create Hibernate Mapping.
6.配置生成的持久化類和映射文件。
7.點(diǎn)擊Browse,選擇生成的類和映射文件的包:com.xxx
8.ID Generator算法選項(xiàng)念漏,選擇native。(還有很多其他的選項(xiàng)可選,根據(jù)應(yīng)用的需要具體選擇,好像hibernate映搏棗射的表必須有主健,否則無法利用hibernate技術(shù))。
9.點(diǎn)擊完成,這樣會生成持久化類Vipdata和它的父類AbstractVipdata(生成父類,有利于日后應(yīng)用的擴(kuò)展,工具會自動生成詳細(xì)的equals方法和hashCode方法)以及映射文件xxx.hbm.xml。同時(shí)會修改Hibernate的配置文件hibernate.cfg.xml,會增加一行.
到此,hibernate mapping文件生成結(jié)束。:)
其實(shí),eclipse對struts的支持也是很強(qiáng)大的,按照相似的步驟進(jìn)行配置。很多的工作量就可以完全交給eclipse了
就是根據(jù)db_table 生產(chǎn) java類和映射文件是不?
簡單:
假設(shè)你用netbeans或者Eclipse,(都差不多)
1,找到配置好的數(shù)據(jù)庫,
2,打開數(shù)據(jù)庫連接
3,選中需要生成的java文件的表
4,右鍵 –有生成hbm等字樣,點(diǎn)一雀蘆下就好咯
都是這陵悶樣的,沒必要用ant,省力省頃汪帶心……
選我哦
可能Hibernate不足以實(shí)現(xiàn)你的功能,不過可以用JDBC自己做,因?yàn)镴DBC提供了各種API用以獲取數(shù)據(jù)庫的信息,我想ANT也是用JDBC實(shí)現(xiàn)的,就比如,
獲取數(shù)據(jù)庫的表的各種字段,類型等蘆巧,我想Hibernate似乎做不到這個(gè),而JDBC可以
不知道我歷纖這樣說你理解否?肢嘩仿
node cannot be resolved for the specified context 是什么錯(cuò)誤?spring.net + nhibernate配置問題
這種情況我遇到過,有螞團(tuán)兩種可能
1.類中芹枯聲明的服務(wù)名稱和注入的名稱不匹配
2.類中聲明服務(wù)時(shí),忘記了修飾符悶首橘protected或 public
關(guān)于nhibernat數(shù)據(jù)庫配置的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
創(chuàng)新互聯(lián)服務(wù)器托管擁有成都T3+級標(biāo)準(zhǔn)機(jī)房資源,具備完善的安防設(shè)施、三線及BGP網(wǎng)絡(luò)接入帶寬達(dá)10T,機(jī)柜接入千兆交換機(jī),能夠有效保證服務(wù)器托管業(yè)務(wù)安全、可靠、穩(wěn)定、高效運(yùn)行;創(chuàng)新互聯(lián)專注于成都服務(wù)器托管租用十余年,得到成都等地區(qū)行業(yè)客戶的一致認(rèn)可。
網(wǎng)站題目:NHibernate數(shù)據(jù)庫配置詳解(nhibernat數(shù)據(jù)庫配置)
網(wǎng)頁URL:http://m.5511xx.com/article/dhgopsj.html


咨詢
建站咨詢
