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.实数(即带小数点的数字)在计算机中使用一种浮点的方法来表示.因此,实数也称为浮点 ...
随机推荐
- JS中document.createElement()用法及注意事项
今天处理了一个日期选择器的ie和ff的兼容问题,本来这种情况就很难找错误,找了好久才把错误定位到js中创建元素的方法document.createElement(),这个方法在ie下支持这样创建元素 ...
- lightoj 1012
水题,dfs #include<cstdio> #include<string> #include<cstring> #include<iostream> ...
- POJ 2449
#include<queue> #include<cstdio> #include<string> #include<cstring> #include ...
- vijosP1164 曹冲养猪
vijosP1164 曹冲养猪 链接:https://vijos.org/p/1164 [思路] 数学. 如果x不能满足模公式则+gcd,gcd=a的积(a互质)使加上gcd后依然满足前面的模公式. ...
- NOIP 2015 子串
借鉴大神思路... #include<cstdio> #include<cstring> #include<cstdlib> #include<iostrea ...
- java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0 *&* 解决方法
java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0*&*^ at java. ...
- 坑爹的IE quirk模式【转】
调试一个页面,ie下面页面css样式很是奇怪,各种失效.找了半天原因不知道怎么回事.最后在调试工具中发现,文档模式为quirk,改成别的(IE 7|8|9)正常. 为什么会自动选择此文档模式呢? 先看 ...
- elasticsearch安装过程中的license问题解决办法
1.git clone git://github.com/mobz/elasticsearch-head.git 2.cd elasticsearch-head 3.npm install 出现下来问 ...
- Hyper-V性能-CPU分配
为新部署的微软Hyper-V环境中的主机和网络挑选合适的硬件并非易事,更不用说在生产环境中衡量和监控性能这项任务了.在这里,我和大家谈谈服务器的核心CPU与Hyper-V的结合是如何相得益彰的. 我接 ...
- 【转】Sqlserver通过链接服务器访问Oracle的那些事儿!
原文:http://blog.sina.com.cn/s/blog_614b6f210100t80r.html 前言:1.不经历风雨,怎能见彩虹.2.充分利用BaiDu.google等搜索引擎查找资料 ...