LSJ_NHibernate第二章 ManagerPage
前言:
项目为传统的三层架构,可以根据个人的需求进行拓展.

很多人都在质疑B层的作用,我认为B层才是核心,这个取决于业务的复杂度

项目的结构也比较的简单,我们先从最底层说起,ManagerPage,这是我定义的一个基类,它总共做了三件事,1.初始化NHibernate,2.解析参数模板,3.创建ICriteria(条件查询器对象)返回查询结果
1.初始化NHibernate
/// <summary>
/// 链接信息,初始化NH
/// </summary>
public static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
var path = HttpContext.Current.Server.MapPath("/bin/hibernate.cfg.xml");
var cfg = new NHibernate.Cfg.Configuration().Configure(path);
_sessionFactory = cfg.BuildSessionFactory();
}
return _sessionFactory;
}
}
注意,sessionFactory是创建session的工厂,通常一个数据库创建一个即可,是比较耗资源的一个地方,所以必须用到单例
2.解析参数模板
public class SearchTemplate
{
public string key { get; set; }
public object value { get; set; }
public Common.EnumBase.SearchType searchType { get; set; } }
参数模板有三个属性,分别是 key对应表里的字段,value对应值,searchType对应操作类型,这里是一个枚举
public enum SearchType
{
/// <summary>
/// 等于
/// </summary>
Eq = ,
/// <summary>
/// 大于
/// </summary>
Gt =,
/// <summary>
/// 大于等于
/// </summary>
Ge=,
/// <summary>
/// 小于
/// </summary>
Lt=,
/// <summary>
/// 小于等于
/// </summary>
Le =,
/// <summary>
/// 等于空值
/// </summary>
IsNull =,
/// <summary>
/// 非空值
/// </summary>
IsNotNull=,
/// <summary>
/// 模糊查询 xx%
/// </summary>
Like=,
/// <summary>
/// 模糊查询 %xx
/// </summary>
StartLike = ,
/// <summary>
/// 等于列表中的某一个值
/// </summary>
In =,
/// <summary>
/// 不等于列表中任意一个值
/// </summary>
NotIn=,
/// <summary>
/// 分页{pageindex,pagesize}
/// </summary>
Paging = ,
}
这里可以根据自己的需求在这里定义,这里定义的都是ICriteria支持的操作
3.创建ICriteria对象
private static ICriteria GetCrit(List<SearchTemplate> list, ICriteria crit,int type = )
{
foreach (var item in list)
{
if (item.value == null) continue;
if (item.value.GetType() == typeof(String))
{
if (item.value.ToString() == "") continue;
}
if (item.searchType.ToString() == Common.EnumBase.SearchType.Eq.ToString())
{
crit.Add(Restrictions.Eq(item.key, item.value));
continue;
}
if (item.searchType.ToString() == Common.EnumBase.SearchType.Gt.ToString())
{
crit.Add(Restrictions.Gt(item.key, item.value));
continue;
}
if (item.searchType.ToString() == Common.EnumBase.SearchType.Ge.ToString())
{
crit.Add(Restrictions.Ge(item.key, item.value));
continue;
}
if (item.searchType.ToString() == Common.EnumBase.SearchType.Lt.ToString())
{
crit.Add(Restrictions.Lt(item.key, item.value));
continue;
}
if (item.searchType.ToString() == Common.EnumBase.SearchType.Le.ToString())
{
crit.Add(Restrictions.Le(item.key, item.value));
continue;
}
if (item.searchType.ToString() == Common.EnumBase.SearchType.IsNull.ToString())
{
crit.Add(Restrictions.IsNull(item.key));
continue;
}
if (item.searchType.ToString() == Common.EnumBase.SearchType.IsNotNull.ToString())
{
crit.Add(Restrictions.IsNotNull(item.key));
continue;
}
if (item.searchType.ToString() == Common.EnumBase.SearchType.Like.ToString())
{
crit.Add(Restrictions.Like(item.key, item.value + "%"));
continue;
}
if (item.searchType.ToString() == Common.EnumBase.SearchType.StartLike.ToString())
{
crit.Add(Restrictions.Like(item.key, "%" + item.value));
continue;
}
if (item.searchType.ToString() == Common.EnumBase.SearchType.In.ToString())
{
crit.Add(Restrictions.In(item.key, (object[])item.value));
continue;
}
if (item.searchType.ToString() == Common.EnumBase.SearchType.NotIn.ToString())
{
crit.Add(Restrictions.Not(Restrictions.In(item.key, (object[])item.value)));
continue;
}
if (item.searchType.ToString() == Common.EnumBase.SearchType.Paging.ToString() && type == )
{
int[] paging = (int[])item.value;
crit.SetFirstResult((paging[] - ) * paging[]);
crit.SetMaxResults(paging[]);
continue;
}
}
return crit;
}
这里返回ICriteria对象,NHibernate的查询方式有多种,你可以根据你的喜好进行拓展Query Over,HQL,ICriteria,Linq
LSJ_NHibernate第二章 ManagerPage的更多相关文章
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...
- Jenkins入门系列之——02第二章 Jenkins安装与配置
2014-12-08:已不再担任SCM和CI的职位,Jenkins的文章如无必要不会再维护. 写的我想吐血,累死了. 网页看着不爽的,自己去下载PDF.有问题请留言! Jenkins入门系列之——03 ...
- Python黑帽编程 2.0 第二章概述
Python黑帽编程 2.0 第二章概述 于 20世纪80年代末,Guido van Rossum发明了Python,初衷据说是为了打发圣诞节的无趣,1991年首次发布,是ABC语言的继承,同时也是一 ...
- 《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型
第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以 ...
- Asp.Net MVC4 + Oracle + EasyUI 学习 第二章
Asp.Net MVC4 + Oracle + EasyUI 第二章 --使用Ajax提升网站性能 本文链接:http://www.cnblogs.com/likeli/p/4236723.html ...
- 数据结构与算法分析C++表述第二章编程题
把昨天看的第二章巩固一下,做一做编程习题. 2.6: 第一天交2元罚金,以后每一天都是前一天的平方,第N天罚金将是多少? 这个题目和2.4.4-3介绍的幂运算基本一致.若按相同的递归思路分析,比那个问 ...
- 【vue.js权威指南】读书笔记(第二章)
[第2章:数据绑定] 何为数据绑定?答曰:数据绑定就是将数据和视图相关联,当数据发生变化的时候,可以自动的来更新视图. 数据绑定的语法主要分为以下几个部分: 文本插值:文本插值可以说是最基本的形式了. ...
- Java语言程序设计(基础篇)第二章
第二章 基本程序设计 2.2 编写简单的程序 1.变量名尽量选择描述性的名字(descriptive name). 2.实数(即带小数点的数字)在计算机中使用一种浮点的方法来表示.因此,实数也称为浮点 ...
随机推荐
- 致改变——总结&规划(2016·一)
今天是立夏,过完这一天意味着农历2016年的第一季度已经过去了,也意味着真正的夏天已经来了.如果说春天是作物的播种期的话,那夏天可以看做是作物的成长期,也是农民伯伯们最繁忙的时期.本文主要对自己过去的 ...
- c#集合类的线程安全
即位于System.Collections命名空间下的集合,如Hashtable,ArrayList,Stack,Queue等.其均提供了线程同步的一个实现 集合线程同步的问题 public clas ...
- JavaScript window.location对象
JavaScript window.location对象 示例 注意 方法 经常使用window.location,它的结构总是记不住,简单梳理下,方便以后查询. 示例 URL:http://b. ...
- Cookie的Domain
每个Cookie都有常用的几个元素:name.value.expires.domain Cookie的Domain 设置cookies时,可以设置cookie的域名参数domain,标识cookie在 ...
- [liu yanling]软件测试用例的基本要素包括哪些?
用例编号: 测试用例的编号有一定的规则,比如系统测试用例的编号这样定义规则: PROJECT1-ST-001 ,命名规则是项目名称+测试阶段类型(系统测试阶段)+编号.定义测试用例编号,便于查找测试用 ...
- jps 显示process information unavailable解决方法
jps 显示process information unavailable解决办法jps时出现如下信息: 4791 -- process information unavailable 解决办法: 进 ...
- WCF入门(一)——基本知识
构建一个WCF程序通常分为三个部分:服务类(Server).宿主(Host).客户程序(Client).有一个很重要的程序集(System.ServeiceModel)要引用,它包含WCF的核心功能. ...
- centos6.4 yum kvm
1. 安装软件包: yum -y install virt-manager; yum install qemu-kvm yum install libvirt yum install libvi ...
- Codeforces Round #313 (Div. 2) D.Equivalent Strings (字符串)
感觉题意不太好懂 = =# 给两个字符串 问是否等价等价的定义(满足其中一个条件):1.两个字符串相等 2.字符串均分成两个子串,子串分别等价 因为超时加了ok函数剪枝,93ms过的. #includ ...
- Altium Designer 多通道设计
转chenzelin2009的csdn博客:http://blog.csdn.net/chenzelin2009/article/details/5751251# Altium Designer的多图 ...