前言:

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

很多人都在质疑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. myeclipse安装svn插件的多种方式

          开发者服务评测征文 十万现金悬赏大神 方法一:在线安装 1.打开HELP->MyEclipse Configuration Center.切换到SoftWare标签页. 2.点击Ad ...

  2. 从零开始学习jQuery (六) AJAX快餐

    一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些许秘籍. 本篇文章讲解如何使用jQuery方便快捷的实现A ...

  3. Problems encountered while deleting resources.

    Error The project was not built due to “Problems encountered while deleting resources.”. Fix the pro ...

  4. Android ListView初始化简单分析

    下面是分析ListView初始化的源码流程分析,主要是ListVIew.onLayout过程与普通视图的layout过程完全不同,避免流程交代不清楚,以下是一个流程的思维导图. 思维导图是顺序是从左向 ...

  5. How to detect and avoid memory and resources leaks in .NET applications

    By Fabrice Marguerie Despite what a lot of people believe, it's easy to introduce memory and resourc ...

  6. 《深度探索C++对象模型》学习笔记

    1.转型其实是一种编译器指令, 大部分情况下它并不改变一个指针所含的真正地址,它只影响"被指出之内存的大小和内容"的解释方式. 2.Global objects的内存保证会在程序启 ...

  7. jQuery掷骰子

    网上找的jQuery掷骰子效果,测试兼容IE7及以上浏览器,IE6没有测试 js代码如下: $(function(){ var dice = $("#dice"); dice.cl ...

  8. flume服务的搭建

    搭建前先统一时间,关闭防火墙,使用的jar包版本是1.6.0的 服务配置有两种方式 第一种:具体步骤如下: 1.将jar包传至node1上,解压至根目录 2.更改目录名,使用如下命令:mv apach ...

  9. linux驱动程序之电源管理之regulator机制流程 (1)

    电源管理芯片可以为多设备供电,且这些设备电压电流有所同.为这些设备提供的稳压器代码模型即为regulator. 下面通过下面三个过程分析regulartor供电机制: 1.分析regulator结构体 ...

  10. bsp板级支持包

    定义 2作用 ▪ 建立让操作系统运行的基本环境  ▪ 完善操作系统运行的环境 3开发流程     1定义 板级支持包(BSP)是介于主板硬件和操作系统中驱动层程序之间的一层,一般认为它属于操作系统一部 ...