NHibernate之旅(14):探索NHibernate中使用视图
本节内容
- 引入
- 1.持久化类
- 2.映射文件
- 3.測试
- 结语
引入
在数据库操作中,我们除了对表操作,还有视图、存储过程等操作,这一篇和下篇来学习这些内容。这篇我们来学习怎样在NHibernate中使用视图。首先,我们在数据库中建立一个名为viewCustomer视图。选中CustomerId、Firstname、Lastname、OrderId、OrderDate项。
以下我们依次为这个视图编写持久化类和映射吧。
1.持久化类
同持久化数据库中的表类似,我们须要对视图持久化,定义视图中的每一个属性,由于视图是仅仅读的,所以在这里我们仅仅要把属性的Setter设置为private訪问权限。
详细做法例如以下:
在项目DomainModel层的Entities目录中新建CustomerView.cs类,编写代码例如以下:
- namespace DomainModel.Entities
- {
- public class CustomerView
- {
- public virtual int CustomerId { get; private set; }
- public virtual string Firstname { get; private set; }
- public virtual string Lastname { get; private set; }
- public virtual int OrderId { get; private set; }
- public virtual DateTime OrderDate { get; private set; }
- }
- }
2.映射文件
在项目DomainModel层的Mappings目录中新建CustomerView.hbm.xml文件。与映射数据库表类似。编写代码例如以下:
- <?xml version="1.0" encoding="utf-8" ?>
- <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
- assembly="DomainModel" namespace="DomainModel">
- <class name="DomainModel.Entities.CustomerView,DomainModel"
- table="viewCustomer" mutable="false" >
- <id name="CustomerId" column="CustomerId" type="Int32">
- <generator class="native" />
- </id>
- <property name="Firstname" column="Firstname" type="string" />
- <property name="Lastname" column="Lastname" type="string" />
- <property name="OrderId" column="OrderId" type="Int32" />
- <property name="OrderDate" column="OrderDate" type="DateTime" />
- </class>
- </hibernate-mapping>
好了,到这里我们准备工作就做完了,即完毕了持久化和映射。
以下我们能够使用视图了。
3.測试
在数据訪问层(DAL)中编写一个方法获取订单时间在orderDate之后的顾客列表,方法例如以下:
- public IList<CustomerView> GetCustomerView(DateTime orderDate)
- {
- return _session.CreateCriteria(typeof(CustomerView))
- .Add(Restrictions.Gt("OrderDate", orderDate))
- .List<CustomerView>();
- }
在数据訪问測试层(DAL.Test)中编写一个方法因为測试上面的方法。首先调用这种方法查询出订单时间在2008年10月1日之后的顾客列表。断言其订单时间是否大于2008年10月1日。
- [Test]
- public void GetCustomerViewTest()
- {
- DateTime testorderDate = new DateTime(2008, 10, 1);
- IList<CustomerView> customers =
- _relation.GetCustomerView(testorderDate);
- foreach (CustomerView view in customers)
- {
- Assert.GreaterOrEqual(view.OrderDate, testorderDate);
- }
- }
OK!
測试通过。NHibernate生成SQL语句例如以下:
- SELECT this_.CustomerId as CustomerId0_0_,
- this_.Firstname as Firstname0_0_,
- this_.Lastname as Lastname0_0_,
- this_.OrderId as OrderId0_0_,
- this_.OrderDate as OrderDate0_0_
- FROM viewCustomer this_
- WHERE this_.OrderDate > @p0; @p0 = '2008/10/1 0:00:00'
好了。到此我们学会了在NHibernate中怎样使用视图,是不是非常easy啊。
结语
通过这篇文章的展示,我们学习了在NHibernate中怎样使用视图,同表类似,仅仅是属性訪问权限不同罢了,假设你原来不知道怎样使用视图,网上到如今也没有相关资料认为无从下手,通过这篇文章的高速阅读,是不是使用视图非常easy,豁然开朗的样子(视图原来这样啊,没有什么神奇之处~~)。
下篇我们来看看NHibernate中使用储存过程,用过存储过程的朋友都知道。真是烦人,这个存储过程我真是弄了非常长时间。在实际运用中错误不断,我把它一一化解,请征集意见,大家说下篇是写一一化解的整个具体过程(涉及错误信息。怎样改动,2篇样子)还是直接讲正确方案(1篇搞定)。由你做主!
NHibernate之旅(14):探索NHibernate中使用视图的更多相关文章
- NHibernate之旅系列文章导航
NHibernate之旅系列文章导航 宣传语 NHibernate.NHibernate教程.NHibernate入门.NHibernate下载.NHibernate教程中文版.NHibernate实 ...
- [转]NHibernate之旅(10):探索父子(一对多)关联查询
本节内容 关联查询引入 一对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 关联查询引入 在NHibernate中提供了三种查询方式给我们选择:NH ...
- NHibernate之旅(21):探索对象状态
本节内容 引入 对象状态 对象状态转换 结语 引入 在程序运行过程中使用对象的方式对数据库进行操作,这必然会产生一系列的持久化类的实例对象.这些对象可能是刚刚创建并准备存储的,也可能是从数据库中查询的 ...
- NHibernate之旅(18):初探代码生成工具使用
本节内容 引入 代码生成工具 结语 引入 我们花了大量的篇幅介绍了相关NHibernate的知识.一直都是带着大家手动编写代码,首先创建数据库架构.然后编写持久化类和映射文件,最后编写数据操作方法.測 ...
- [转]NHibernate之旅(12):初探延迟加载机制
本节内容 引入 延迟加载 实例分析 1.一对多关系实例 2.多对多关系实例 结语 引入 通过前面文章的分析,我们知道了如何使用NHibernate,比如CRUD操作.事务.一对多.多对多映射等问题,这 ...
- Fluent NHibernate之旅
Fluent NHibernate 之旅 导航篇: [原创]Fluent NHibernate之旅开篇: [原创]Fluent NHibernate之旅二--Entity Mapping: [原创]F ...
- [转]NHibernate之旅(1):开篇有益
本节内容 NHibernate是什么 NHibernate的架构 NHibernate资源 欢迎加入NHibernate中文社区 作者注:2009-11-06已更新 NHibernate开篇有益 学习 ...
- NHibernate系列文章八:NHibernate对象一级缓存
摘要 Nhibernatea缓存非常强大,按照缓存存储在Session对象还是SessionFactory对象分为一级缓存和二级缓存. 一级缓存存在于Session对象里,也叫Session缓存,由S ...
- 通俗易懂的Nhibernate教程(2) ---- 配置之Nhibernate配置
在上一个教程中,我们讲了Nhibernate的基本使用!So,让我们回顾下Nhibernate使用基本的步骤吧 1.NHibernate配置 ----- 这一步我们告诉了Nhibernate:数据库 ...
随机推荐
- POJ 2492 A Bug's Life 带权并查集
题意: 思路: mod2 意义下的带权并查集 如果两只虫子是异性恋,它们的距离应该是1. 如果两只虫子相恋且距离为零,则它们是同性恋. (出题人好猥琐啊) 注意: 不能输入一半就break出来.... ...
- 项目中遇到的所有ECharts图表集合
全放在了ECharts官网示例里面以后会一直往里面添加: https://gallery.echartsjs.com/explore.html?u=bd-2133619855&type=wor ...
- Java基础之多线程简述
首先,要辨析进程与线程的概念: 进程是程序执行的过程,它持有资源和线程,相对于程序本身而言具有动态性. 线程是系统中最小的执行单元,同一个进程中可能有多个线程,它们共享该进程持有的资源.线程的通信也称 ...
- 多线程之HttpClient
在程序用调用 Http 接口.请求 http 资源.编写 http 爬虫等的时候都需要在程序集中进行 Http 请求. 很多人习惯的 WebClient.HttpWebRequest 在 TPL 下很 ...
- python os 模块常用操作
python 2.7 os 常用操作 官方document链接 文件和目录 os.access(path, mode) 读写权限测试 应用: try: fp = open("myfile&q ...
- VS2012编译PCL1.70的过程
以防博主删除文档,重新copy一遍... 关于个人的几个注意事项: 对于boost,可以使用vc100的库,来编译VC110的代码: 对于确实的包含,一个一个添加,要耐心等待!!! 原文链接:http ...
- 配置OpenCV的Qt开发环境
QT&openCV系列!链接:http://www.cnblogs.com/emouse/category/449213.html 本文链接:http://blog.csdn.net/qiur ...
- 还是UVa340
#include<stdio.h> #define maxn 1010 int main() { int num,a[maxn],i,j,b[maxn]; ; &&num) ...
- Postfix Self Expression
Postfix Self Expression A postfix self expression consists of an expression or the name of a type, i ...
- 接口测试及Postman工具
首先,什么是接口呢? 接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口.系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写 ...