亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

【轉載】ADO.NET與ORM的比較(2):NHibernate實現CRUD

2019-11-17 01:54:49
字體:
來源:轉載
供稿:網友

【轉載】ADO.NET與ORM的比較(2):NHibernate實現CRUD

【轉載】ADO.NET與ORM的比較(2):NHibernate實現CRUD 轉自周公

說明:個人感覺在java領域大型開發都離不了ORM的身影,所謂的SSH就是SPRing+Struts+Hibernate,除了在學習基礎知識的時候被告知可以使用JDBC操作數據庫之外,大量的書籍中都是講述使用Hibernate這個ORM工具來操作數據。在.NET中操作數據庫的方式有多種,除了最直接的方式就是使用ADO.NET之外,還可以使用NHibernate這個Hibernate在.NET中的實現ORM,如果你對第三方的ORM持懷疑態度,你還可以使用來自微軟的實現、根正苗紅的Linq或者EntityFramework。大部分從早期就開始使用.NET開發的程序員可能對ADO.NET有種迷戀,使用ADO.NET可以充分將我們早期的SQL知識發揮得淋漓盡致,并且出于對性能的考慮,有些人對.NET中的ORM還保持一種觀望態度,包括我自己也是這種態度。不過即使在實際開發中不用,并不代表我們不能去了解和比較這些技術,任何事物的出現和消亡總有其原因的,我們可以了解它們的優點和長處。所以本人抽出了幾個周末的時間分別用ADO.NET、NHibernate、Linq和EntityFramework來實現對數據庫單表數據的創建、讀取、更新和刪除操作,也就是所謂的CRUD(C:Create/R:Read/U:Update/D:Delete)。通過實現相同功能的比較,大家自己判斷那種方式更適合自己。需要說明的是,如果在VS2008中使用EntityFramework就需要安裝VS2008SP1。在本篇周公將講述如何利用NHibernate實現CRUD功能,為了便于對比,在本次中采用與上次同樣的數據庫和表,并且也實現同樣的功能。NHibernate是一個ORM框架,所謂ORM就是Object Relational Mapping,是一種將關系型數據庫中的數據與面向對象語言中對象建立映射關聯的技術,我們可以想操作對象一樣操作數據,NHibernate將我們對對象的變更保存到數據庫中去,并且還負責以對象的方式從數據庫中查詢數據,這樣就可以使開發人員從處理SQL和ADO.NET上節省一些時間和精力用于處理業務邏輯。1、準備首先我們需要從網上下載NHibernate框架,這個可以到它的官方網站www.nhibernate.org上去下載,在周公寫這篇文章的時候從網上能下載到的最新版本為2.1.2.GA。如果下載的是壓縮包,請將壓縮包解壓,將會看到四分文件夾,它們的名稱和作用分別如下:Configuration_Templates:存放NHibernate連接數據庫的配置文件的示例,在這個文件夾下分別有連接Firebird、SQL Server、MySQLOracle、PostgreSQL和SQLite數據庫的配置示例,可以根據實際所使用的數據庫選擇示例中的代碼并更改其中的數據源即可。Required_Bins:存放NHibernate運行過程中所需要的類庫文件,其中還包含了第三方的開源日志框架Log4Net,在不確定到底會使用那些類庫的條件下建議將這個文件夾下所有的dll文件拷貝到項目的bin文件夾下。Required_For_LazyLoading:存放延時加載特性支持所需的框架文件,在這個文件夾下提供了三種實現,選擇一種將其下所有的dll文件拷貝到項目所在的bin文件夾下。在本示例中選擇了Castle。Tests:存放測試用文件,在此文件夾下還有一個名為ABC.hbm.xml的文件,這是一個數據表對應的配置文件的示例,在這個文件夾下的文件我們都用不著,不過在以后我們會用到.hbm.xml文件。2、創建項目我們創建一個項目,項目類型可以根據情況選擇,因為我今后要使用NUnit來對項目進行單元測試,所以創建的類庫項目。創建項目成功之后將如下文件拷貝到項目的bin目錄下:Antlr3.Runtime.dllCastle.Core.dllCastle.DynamicProxy2.dllIesi.Collections.dlllog4net.dllNHibernate.ByteCode.Castle.dllNHibernate.dll然后在項目中添加對這些dll的引用,如下圖所示:3、編寫代碼3.1創建NHibernate配置文件NHibernate的配置文件有相對比較固定的格式,這個可以從下載到框架文件壓縮包解壓得到,位于Configuration_Templates文件夾下。向當前項目添加一個名為hibernate.cfg.xml的xml文件,在周公的機器上這個文件的格式內容如下:

<?xml version="1.0" encoding="utf-8" ?>  <hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >   <session-factory>    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>    <property name="connection.connection_string">     Data Source=zhou;Initial Catalog=aspNetStudy;User ID=sa;PassWord=jerry;    </property>    <property name="adonet.batch_size">10</property>    <property name="show_sql">true</property>    <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>    <property name="use_outer_join">true</property>    <property name="command_timeout">10</property>    <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>    <property name="proxyfactory.factory_class">     NHibernate.ByteCode.Castle.ProxyFactoryFactory,     NHibernate.ByteCode.Castle    </property>    <mapping assembly="NHibernateDemo"/>   </session-factory>  </hibernate-configuration>  
View Code

如果你也是使用SQL Server2005作為數據庫的話,那么需要更改connection.connection_string中的數據庫連接信息為你本機的連接信息,并且實際情況更改assembly的值為你當前項目編譯后的程序集名稱。在這里還需要注意的是需要將hibernate.cfg.xml的屬性更改為復制屬性改為始終復制,如下圖所示:3.2創建映射文件映射文件包含了對象/關系所需要的元數據,其中包含了所使用的持久化類和到數據庫的映射。NHibernate就是通過映射文件知道怎樣加載和存儲持久化對象。在項目中增加一個名為UserInfo.hbm.xml的xml文件,這個xml文件的內容如下:

<?xml version="1.0" encoding="utf-8" ?>  <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernateDemo" namespace="NHibernateDemo">   <class name="UserInfo">    <id name="UserId" column="UserId">     <generator class="native"/>    </id>    <property name="UserName"/>    <property name="RealName"/>    <property name="Age"/>    <property name="Sex"/>    <property name="Mobile"/>    <property name="Phone"/>    <property name="Email"/>   </class>  </hibernate-mapping> 
View Code

注意:如果想要獲得在編輯hibernate.cfg.xml或者UserInfo.hbm.xml時的智能提示,可以將下載NHibernate壓縮包中的nhibernate-configuration.xsd和nhibernate-mapping.xsd文件拷貝到VS的一個特殊文件夾中,在本機上周公在C盤安裝了VS2008,那么需要將上面提到的文件拷貝到C:/Program Files/Microsoft Visual Studio 9.0/Xml/Schemas目錄下,你需要根據你的實際情況來拷貝。需要更改這個文件的屬性,改為“嵌入的資源”,如下圖所示:3.3創建持久化類在當前項目中創建一個名為UserInfo.cs的類文件,這個類的代碼如下:

using System;  using System.Collections.Generic;  using System.Text;    namespace NHibernateDemo  {      /// <summary>       /// 數據庫中UserInfo表的持久化類       /// 作者:周公       /// 博客地址:http://blog.csdn.net/zhoufoxcn       /// 日期:2010-03-19       /// </summary>       public class UserInfo      {          public virtual int UserId { get; set; }          public virtual string UserName { get; set; }          public virtual string RealName { get; set; }          public virtual int Age { get; set; }          public virtual bool Sex { get; set; }          public virtual string Mobile { get; set; }          public virtual string Phone { get; set; }          public virtual string Email { get; set; }      }  }  
View Code

注意:NHibernate通過使用屬性的getter和setter操作來實現對象的持久化,并且要求類不能為sealed,方法和屬性必須為virtual。3.4編寫輔助類通過上面的文件NHibernate就可以實現關系映射了,這里編寫相關的輔助類代碼,如下:

using System;  using System.Collections.Generic;  using System.Text;  using Iesi.Collections;  using NHibernate;  using NHibernate.Cfg;    namespace NHibernateDemo  {      /// <summary>       /// 說明:這個類是為了演示NHibernate中的CRUD的用法       /// 作者:周公(周金橋)       /// 日期:2010-03-07       /// </summary>       public class NHibernateCRUD      {          private ISessionFactory sessionFactory;          public NHibernateCRUD()          {              sessionFactory = new Configuration().Configure().BuildSessionFactory();          }            public ISession GetSession()          {              return sessionFactory.OpenSession();          }          /// <summary>           /// 統計用戶總數           /// </summary>           /// <returns></returns>           public int Count()          {              #region 方法一               //ISession session = GetSession();               //ISQLQuery query = session.CreateSQLQuery("select count(1) from UserInfo");               //int count = query.List<int>()[0];               //sessi
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av免费一区| 国产精品麻豆va在线播放| 不卡av电影在线观看| 亚洲国产精品久久久久秋霞不卡| 中文字幕日韩欧美精品在线观看| 亚洲成人在线视频播放| 色悠悠久久88| 久久五月天色综合| 成人观看高清在线观看免费| 色小说视频一区| 日本精品久久久久久久| 国产精品99久久久久久www| 亚洲欧美国产精品久久久久久久| 日韩性xxxx爱| 亚洲区一区二区| 91在线高清视频| 亚洲毛茸茸少妇高潮呻吟| 亚洲精品电影网站| 亚洲综合精品一区二区| 成人深夜直播免费观看| 91午夜理伦私人影院| 亚洲区中文字幕| 国产伦精品免费视频| 91精品久久久久久久久久久久久久| 精品国产视频在线| 91中文字幕一区| 欧美夫妻性视频| 国产亚洲免费的视频看| 国产精品久久久久国产a级| 亚洲国产精久久久久久| 欧美日韩另类在线| 亚洲国产古装精品网站| 久久久国产一区| 日韩免费观看在线观看| 国产精品中文久久久久久久| 欧美视频一区二区三区…| 欧美极品欧美精品欧美视频| 亚洲自拍偷拍福利| 97超视频免费观看| 自拍偷拍亚洲精品| 亚洲精品之草原avav久久| 色老头一区二区三区| 欧美日韩亚洲系列| 中文字幕久久精品| 精品呦交小u女在线| 亚洲黄页视频免费观看| 国产精品美女www爽爽爽视频| 亚洲第一视频在线观看| 日韩精品www| 亚洲精品综合久久中文字幕| 成人深夜直播免费观看| 亚洲免费av电影| 欧美第一页在线| 久久久午夜视频| 久久久91精品| 日韩专区在线播放| 成人啪啪免费看| 日韩中文字幕网站| 欧美日韩在线视频首页| 日韩中文字幕欧美| 91深夜福利视频| 亚洲国产一区二区三区在线观看| 欧美亚洲视频在线看网址| 国产在线精品成人一区二区三区| 欧美精品在线观看| 亚洲精品国产电影| 国产一区二区三区日韩欧美| 日本国产一区二区三区| 黑人巨大精品欧美一区免费视频| 欧美成人中文字幕| 久久久久国产视频| 久久91亚洲精品中文字幕| 欧美精品少妇videofree| 欧美午夜电影在线| 亚洲精品美女久久久久| 麻豆精品精华液| 最近2019年好看中文字幕视频| 97视频在线观看免费| 91视频国产一区| 亚洲欧美日韩一区在线| 日韩暖暖在线视频| 成人黄色午夜影院| 亚洲视频日韩精品| 不卡伊人av在线播放| 国产中文字幕日韩| 人妖精品videosex性欧美| 欧美极品少妇与黑人| 上原亚衣av一区二区三区| 亚洲伊人第一页| 麻豆国产va免费精品高清在线| 日韩av在线精品| 久久久久久久久国产| 日韩美女免费线视频| 国产日韩在线视频| 国产精品久久久久久av下载红粉| 久久777国产线看观看精品| 日韩精品视频在线播放| 国产欧美婷婷中文| xxxx性欧美| 欧美国产亚洲视频| 欧美性理论片在线观看片免费| 97视频在线观看免费高清完整版在线观看| 欧美日韩国产999| 欧美大片免费观看在线观看网站推荐| 亚洲欧美一区二区三区四区| 欧美大片va欧美在线播放| 欧美成人中文字幕在线| 欧美综合第一页| 国产精品第一区| 日本成人在线视频网址| 伊人久久久久久久久久久| 国产免费观看久久黄| 久久综合88中文色鬼| 色偷偷偷综合中文字幕;dd| 日韩专区在线观看| 久久九九热免费视频| 成人在线小视频| 国a精品视频大全| 日韩一区二区久久久| 国产成人综合av| 国产精品美女在线| 国产成人avxxxxx在线看| 欧美精品在线观看| 91在线视频九色| 精品国偷自产在线视频99| 成人精品久久一区二区三区| 亚洲国产成人精品电影| 韩国国内大量揄拍精品视频| 欧美精品激情在线| 91精品视频专区| 亚洲黄色在线观看| 欧美日韩国产999| 91人人爽人人爽人人精88v| 中文字幕欧美亚洲| 精品视频在线观看日韩| 中文字幕亚洲在线| 国产精品福利无圣光在线一区| 8090理伦午夜在线电影| 亚洲国产天堂网精品网站| 亚洲精品视频久久| 欧美与欧洲交xxxx免费观看| 亚洲一区二区福利| 国产精品中文久久久久久久| 亚洲大胆美女视频| 欧美性高跟鞋xxxxhd| 精品国产91久久久久久| 黑人精品xxx一区一二区| 日韩在线视频观看正片免费网站| 成人羞羞国产免费| 日本三级久久久| 亚洲色在线视频| 中文字幕在线看视频国产欧美| 亚洲人成网7777777国产| 亚洲成人av片| 91精品国产91久久久久久吃药| 国产精品久久久久久久av大片| 亚洲精品乱码久久久久久金桔影视| 中文在线资源观看视频网站免费不卡| 中文字幕国内精品| 日韩中文字幕视频在线| 高清一区二区三区四区五区| 精品成人国产在线观看男人呻吟| 亚洲国产日韩精品在线| 欧美精品久久久久久久久久|