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.实数(即带小数点的数字)在计算机中使用一种浮点的方法来表示.因此,实数也称为浮点 ...
随机推荐
- 在User Profile Service中配置AD的同步连接
转:http://www.360sps.com/Item/ConfigureSynchronizationConnections.aspx 如果要将Active Directory.LDAP 目录和业 ...
- c#调用带有安全认证的java webservice
最近使用c#调用另外一个同事写的java webservice耽误了很多时间,网上资料不太完整,走了很多弯路,希望对大家有帮助. 基本思路是1.拼装soap使用http post ,主要将验证身份信息 ...
- POJ1680 Currency Exchange SPFA判正环
转载来源:優YoU http://user.qzone.qq.com/289065406/blog/1299337940 提示:关键在于反向利用Bellman-Ford算法 题目大意 有多种汇币,汇 ...
- [King.yue]Ext.JS 弹出窗体取值赋值
//从Grid取值 var name = Ext.getCmp(gridGridID).getView().getSelectionModel().getSelection()[0].data.Nam ...
- [Tommas] 如何创建自动化功能测试的基本原则
每个实行持续交付的项目,都有生产流水线的元素,如持续集成和自动化测试.这些测试是在不同层面进行的,从单元测试到冒烟测试再到功能测试.自动化功能测试的优点之一是可重复性和可预测的执行时间.出于这个原因, ...
- SQL Server中CURD语句的锁流程分析
我只在数据库选项已开启“行版本控制的已提交读”(READ_COMMITTED_SNAPSHOT为ON)中进行了观察. 因此只适用于这种环境的数据库. 该类数据库支持四种不同事务隔离级别,下面分别观察数 ...
- HW5.9
public class Solution { public static void main(String[] args) { System.out.printf("%s\t%s\t%s\ ...
- httpclient在抓取网页时出现速度慢的情况分析
问题: 最近在使用httpclient3.0 来做项目,在一台机器部署系统后,发现此机器比其它机器在抓取页面的速度上慢了大概4s,左右. 项目是部署在局域内网,所以代码中都是直接写的IP地址 .在使用 ...
- 在C#中我们能调用一个类的私有方法吗
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:在C#中我们能调用一个类的私有方法吗.
- 百亿级别数据量,又需要秒级响应的案例,需要什么系统支持呢?下面介绍下大数据实时分析工具Yonghong Z-Suite
Yonghong Z-Suite 除了提供优秀的前端BI工具之外,Yonghong Z-Suite让用户可以选购分布式数据集市来支持实时大数据分析. 对于这种百亿级的大数据案例,Yonghong Z- ...