本篇文章,让我们一起来探索Nhibernate。
首先我们去搜索Nhibernate下载地址,如下链接所示。
该版本可能是最新版,我下载的4.0.4.GA。其中GA意思我没搞清楚。不过应该不重要。
https://sourceforge.net/projects/nhibernate/
下载完成后,解压缩如图所示。

其中Required_Bins存储的是类库和其他资源;字面的意思Required,是必须文件。
打开Required文件夹,里是这样的。
两个类库;两个类库是要被引用的。
类库拥有对应的XML,没找到具体使用该XML的方法。所以暂时不去理他。
NHibernate.pdb应该是没有用的。估计是作者忘记删除了。
nhibernate-configuration.xsd和nhibernate-mapping.xsd是要放到c盘的,路径如下:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Xml\Schemas
因为是我用的是vs2012,所以,我找的路径是Microsoft Visual Studio 11.0。
我上网上调查了下这两个文件是做什么用的。调查结果是,这俩货是【文件智能提示功能】用的。
上网调查后,发现Nhibernate有Castle框架、LinFu框架、Spring.Net三种。
看起来很复杂,不过先不去管那么多,先直接引用类库。

然后我建立了一个类库程序,引用Iesi.Collections.dll和NHibernate.dll两个DLL。
接下来,我们开始建立持久化对象。

public class Test
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}

对象与数据库的映射是保存在XML文件中的,我们配置XML映射文件如下。
该XML文件的属性,要求设置其生成操作为【嵌入的资源】。
此外,我怕它丢失,还给他设置了始终复制的属性。

XML文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="NherbinateHelper"
namespace="NherbinateHelper"> <class name ="Test">
<id name="Id" column ="Id">
<generator class ="native"/>
</id>
<property name ="Name"/> </class>
</hibernate-mapping>

再然后,我们建立数据库连接的类。
因为我们没有显示设置数据库连接字符串,所以,我猜测这个类,会读配置文件中SQL字符串连接。

 public class NHibernateHelper
{
private ISessionFactory _sessionFactory;
public NHibernateHelper()
{
_sessionFactory = GetSessionFactory();
}
private ISessionFactory GetSessionFactory()
{
return (new Configuration()).Configure().BuildSessionFactory();
}
public ISession GetSession()
{
return _sessionFactory.OpenSession();
}
}

然后,我们建立domain(域),添加增删改查的方法。

public class NHibernateSample
{
protected ISession Session { get; set; }
public NHibernateSample(ISession session)
{
Session = session;
} public Test GetCustomerById(int Id)
{
return Session.Get<Test>(Id);
}
}

然后,我们新建一个控制台程序,用来调用这个类库测试。

测试类代码如下。

public class NHibernateSampleFixture
{
private NHibernateSample _sample;
public NHibernateSampleFixture()
{
_sample = new NHibernateSample(new NHibernateHelper().GetSession());
}
public void GetCustomerByIdTest()
{
var tempCutomer = new Test { Name = "李" };
_sample.CreateCustomer(tempCutomer);
Test customer = _sample.GetCustomerById(1);
int customerId = customer.Id; }
}

调用如下:

class Program
{ static void Main(string[] args)
{ NHibernateSampleFixture f = new NHibernateSampleFixture(); f.GetCustomerByIdTest();
}
}

测试结果是失败,因为缺少配置数据库连接的文件。
现在我们打开文件夹Configuration_Templates,发现Configuration_Templates文件夹下有如下文件。

我使用的数据库是sqlserver,所以,我复制了mssql.cfg.xml。
然后将复制的文件,黏贴到测试的控制台程序下,然后改名为《hibernate.cfg.xml》。
这里测试了下,貌似不改名不好使,配置文件内容如下
【PS:我始终没搞懂,XML中的CFG代表什么意思。】

<?xml version="1.0" encoding="utf-8"?>

<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
<session-factory name="NHibernate.Test">
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">
Server=SKY-20160718RXO\SA;initial catalog=Nherbinate;Integrated Security=SSPI;
</property>
<property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property>
<mapping assembly="NherbinateHelper"/>
</session-factory>
</hibernate-configuration>

我连接的是sqlserver2012,所以配置文件里,我有做修改,修改驱动为NHibernate.Dialect.MsSql2012Dialect。原始版是2008。
其中<mapping assembly="NherbinateHelper"/>是后加的,原文件里没有。
这句话的意思是,映射我创建的那个类库。
我推断,Nherbinate是读这个配置文件,然后到这个程序集里,反射查询那些poco对象。
最后,nhibernate-configuration-2.2这句话我想了很久要不要改成4.0。
结果是我没改,测试一切正常。可以顺利使用。
结语
这是一场Nhibernate探索之旅,结果是非常顺利的配置成功了。

作者:Kiba518
链接:https://www.imooc.com/article/43748
来源:慕课网
本文首次发布于慕课网 ,转载请注明出处,谢谢合作

最新文章

  1. WPF 自定义IconButton
  2. Windows7微软官方原版镜像系统文件
  3. leetcode 86. Partition List
  4. 注册页面JS前台校验
  5. linux 系统管理 使用技巧
  6. iOS适配HTTPS,创建一个自签名的SSL证书(x509)具体步骤
  7. js,jquery概念理解
  8. 试读《基于MVC的JavaScript Web富应用开发》
  9. jquery获取当前元素坐标
  10. win7下硬盘安装win7+CentOS双系统方法
  11. [编织消息框架][netty源码分析]14 PoolChunk 的 PoolSubpage
  12. java学习(五)--- 方法
  13. java将秒转换为时分秒工具类
  14. 2-zookeeper、ha
  15. IntelliJ IDEA 中文乱码配置
  16. pgAdmin的数据恢复
  17. route
  18. JAVA开发总结
  19. telnet不是内部或外部命令的解决方案
  20. ControlExtensionTest(二)-----CCControlSlider

热门文章

  1. JS中For循环中嵌套setTimeout()方法的执行顺序
  2. JS解析URL参数为对象
  3. C#人民币金额大写转换
  4. freemarker如何在url中传递中文参数
  5. MongoDB的使用学习之(七)MongoDB的聚合查询(两种方式)附项目源码
  6. Ruby下安装cocoapods
  7. SQL常见面试题-行列互换
  8. netlink, PF_NETLINK - 内核与用户之间的通讯
  9. L3-006. 迎风一刀斩
  10. python3:类和实例