博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个NHibernate+Spring.Net小例子
阅读量:6212 次
发布时间:2019-06-21

本文共 4292 字,大约阅读时间需要 14 分钟。

       看到博客园有很多人用Spring.Net和NHibernate这两个框架,所以自己也想学习一下,这是我写的一个关于NHibernate和Spring.Net结合起来的小例子,比较简单,只实现了一个简单的增加信息的功能。不知道结合的合不合理,希望大家给予批评。

    总体思路为:

            1、编写实体类Person和映射文件Person.hbm.xml

            2、使用NHibernate生成表T_Person

            3、编写接口IPersonDao,用PersonDao类实现该接口

            4、使用Spring.Net实现增加信息的功能

            5、测试工具是用的Resharper里自带的测试工具。

    该例子的框架如下:         

实现步骤:

1、新建解决方案SpringNet_Lesson1,添加lib文件夹,里面有

这几个dll。

2、添加Domain类库项目,并编写Person类和映射文件,代码如下:

Person.cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Domain{    public class Person    {        public virtual Guid Id { get; set; }        public virtual string Name { get; set; }    }}

Person.hbm.xml

 将Person.hbm.xml文件的属性设置为嵌入的资源,

3、添加类库项目Dao,编写IPersonDao接口和PersonDao类:

IPersonDao.cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;using Domain;namespace Dao{    public interface IPersonDao    {        object Save(Person person);    }}

PersonDao.cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;using Domain;using NHibernate;using NHibernate.Cfg;namespace Dao{    public class PersonDao : IPersonDao    {        private ISessionFactory sessionFactory;        public PersonDao()        {            var cfg = new Configuration().Configure("Config/hibernate.cfg.xml");            sessionFactory = cfg.BuildSessionFactory();        }        public object Save(Person person)        {            using (ISession session = sessionFactory.OpenSession())            {                var id = session.Save(person);                session.Flush();                return id;            }        }    }}

4、添加类库Test,用于测试。

在类库下有一个Config文件夹,里面有这么一个文件hibernate.cfg.xml,包含了配置数据库的一些相关信息

NHibernate.Driver.SqlClientDriver
server=(local);database=NHibernateDemo;uid=sa;pwd=123456;
10
true
NHibernate.Dialect.MsSql2008Dialect
true
60
update
true 1, false 0, yes 'Y', no 'N'
NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu

添加app.config文件,在这个文件里包含了需要注入的对象,这里只注入了PersonDao:

一个简单的控制反转例子

再编写PersonInit.cs类,用于生成表结构

using System;using System.Collections.Generic;using System.Linq;using System.Text;using NHibernate;using NHibernate.Cfg;using NUnit.Framework;namespace Test{    [TestFixture]    public class PersonInit    {        ///         /// In order to generate table T_Person in database NHibernateDemo.        ///         [Test]        public void Init()        {            var cfg = new Configuration().Configure("Config/hibernate.cfg.xml");            using (ISessionFactory sessionFactory = cfg.BuildSessionFactory())            {            }        }    }}

生成的表结构T_Person为:

接着编写DomainTest.cs类,用于添加数据

using System;using System.Collections.Generic;using System.Linq;using System.Text;using Dao;using Domain;using NHibernate;using NUnit.Framework;using Spring.Context;using Spring.Context.Support;namespace Test{    [TestFixture]    class DomainTest    {        private IPersonDao personDao;        //[SetUp]        //public void Init()        //{        //    personDao = DaoFactory.DataAccess.CreatePersonDao();        //}        [Test]        public void Save()        {            var person = new Person                             {                                 Id = Guid.NewGuid(),                                 Name = "李四"                             };            IApplicationContext context = ContextRegistry.GetContext();            personDao = context.GetObject("PersonDao") as IPersonDao;            if (personDao != null)            {                var id = personDao.Save(person);                Assert.NotNull(id);            }                 }    }}

运行这个测试,可以看到数据已添加进去。

 

 

转载于:https://www.cnblogs.com/GaoHuhu/archive/2012/07/10/2584457.html

你可能感兴趣的文章
SQL系列(十三)—— 关于表的DDL
查看>>
c/c++中保留两位有效数字
查看>>
urlparse获取url后面的参数
查看>>
.NET:可扩展的单据编号生成器 + 简单的解释器
查看>>
Linux服务器守护进程+自动启动+服务配置笔记
查看>>
vi-4
查看>>
C#开发一应用的总结
查看>>
Kibana+Logstash+Elasticsearch 日志查询系统 - 爱开卷360 - 博客园
查看>>
(笔试题)程序运行时间
查看>>
ElasticSearch 2 (32) - 信息聚合系列之范围限定
查看>>
VS2010远程调试C#程序
查看>>
红黑树(中序二叉树)
查看>>
替换 data.frame 中的特殊的值
查看>>
information_schema.columns 学习
查看>>
ASP.NET MVC API 接口验证
查看>>
为Android Studio设置HTTP代理
查看>>
远程桌面连接保存登陆用户以及密码(凭据)备份方法
查看>>
从错误中学python(4)——最小公约数与辗转相除法
查看>>
[js高手之路] 设计模式系列课程 - 迭代器(1)
查看>>
notepad++正则表达式例子
查看>>