前言:

  项目为传统的三层架构,可以根据个人的需求进行拓展.

很多人都在质疑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的更多相关文章

  1. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  2. 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...

  3. Jenkins入门系列之——02第二章 Jenkins安装与配置

    2014-12-08:已不再担任SCM和CI的职位,Jenkins的文章如无必要不会再维护. 写的我想吐血,累死了. 网页看着不爽的,自己去下载PDF.有问题请留言! Jenkins入门系列之——03 ...

  4. Python黑帽编程 2.0 第二章概述

    Python黑帽编程 2.0 第二章概述 于 20世纪80年代末,Guido van Rossum发明了Python,初衷据说是为了打发圣诞节的无趣,1991年首次发布,是ABC语言的继承,同时也是一 ...

  5. 《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型

    第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以 ...

  6. Asp.Net MVC4 + Oracle + EasyUI 学习 第二章

    Asp.Net MVC4 + Oracle + EasyUI 第二章 --使用Ajax提升网站性能 本文链接:http://www.cnblogs.com/likeli/p/4236723.html ...

  7. 数据结构与算法分析C++表述第二章编程题

    把昨天看的第二章巩固一下,做一做编程习题. 2.6: 第一天交2元罚金,以后每一天都是前一天的平方,第N天罚金将是多少? 这个题目和2.4.4-3介绍的幂运算基本一致.若按相同的递归思路分析,比那个问 ...

  8. 【vue.js权威指南】读书笔记(第二章)

    [第2章:数据绑定] 何为数据绑定?答曰:数据绑定就是将数据和视图相关联,当数据发生变化的时候,可以自动的来更新视图. 数据绑定的语法主要分为以下几个部分: 文本插值:文本插值可以说是最基本的形式了. ...

  9. Java语言程序设计(基础篇)第二章

    第二章 基本程序设计 2.2 编写简单的程序 1.变量名尽量选择描述性的名字(descriptive name). 2.实数(即带小数点的数字)在计算机中使用一种浮点的方法来表示.因此,实数也称为浮点 ...

随机推荐

  1. 在User Profile Service中配置AD的同步连接

    转:http://www.360sps.com/Item/ConfigureSynchronizationConnections.aspx 如果要将Active Directory.LDAP 目录和业 ...

  2. c#调用带有安全认证的java webservice

    最近使用c#调用另外一个同事写的java webservice耽误了很多时间,网上资料不太完整,走了很多弯路,希望对大家有帮助. 基本思路是1.拼装soap使用http post ,主要将验证身份信息 ...

  3. POJ1680 Currency Exchange SPFA判正环

    转载来源:優YoU  http://user.qzone.qq.com/289065406/blog/1299337940 提示:关键在于反向利用Bellman-Ford算法 题目大意 有多种汇币,汇 ...

  4. [King.yue]Ext.JS 弹出窗体取值赋值

    //从Grid取值 var name = Ext.getCmp(gridGridID).getView().getSelectionModel().getSelection()[0].data.Nam ...

  5. [Tommas] 如何创建自动化功能测试的基本原则

    每个实行持续交付的项目,都有生产流水线的元素,如持续集成和自动化测试.这些测试是在不同层面进行的,从单元测试到冒烟测试再到功能测试.自动化功能测试的优点之一是可重复性和可预测的执行时间.出于这个原因, ...

  6. SQL Server中CURD语句的锁流程分析

    我只在数据库选项已开启“行版本控制的已提交读”(READ_COMMITTED_SNAPSHOT为ON)中进行了观察. 因此只适用于这种环境的数据库. 该类数据库支持四种不同事务隔离级别,下面分别观察数 ...

  7. HW5.9

    public class Solution { public static void main(String[] args) { System.out.printf("%s\t%s\t%s\ ...

  8. httpclient在抓取网页时出现速度慢的情况分析

    问题: 最近在使用httpclient3.0 来做项目,在一台机器部署系统后,发现此机器比其它机器在抓取页面的速度上慢了大概4s,左右. 项目是部署在局域内网,所以代码中都是直接写的IP地址 .在使用 ...

  9. 在C#中我们能调用一个类的私有方法吗

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:在C#中我们能调用一个类的私有方法吗.

  10. 百亿级别数据量,又需要秒级响应的案例,需要什么系统支持呢?下面介绍下大数据实时分析工具Yonghong Z-Suite

    Yonghong Z-Suite 除了提供优秀的前端BI工具之外,Yonghong Z-Suite让用户可以选购分布式数据集市来支持实时大数据分析. 对于这种百亿级的大数据案例,Yonghong Z- ...