跟我学 NHibernate (一)
NHibernate 是一个强大的 ORM 框架,本博文主要就 NHibernate 的使用方法及语法做一些简单的介绍。
1.NHibernate 语法
新建一个类,命名为: QueryCriteriaAPI, 并创建构造函数
private ISession _session;
public ISession Session
{
set
{
_session = value;
}
}
public QueryCriteriaAPI(ISession session)
{
_session = session;
}
#region 语法学习
/// <summary>
/// 创建ICriteria实例
/// </summary>
/// <returns></returns>
public IList<Customer> CreateCriteria()
{
//NHibernate.ICriteria这个接口代表对一个特定的持久化类的查询。
//ISession是用来制造Criteria实例的工厂。
var crit = _session.CreateCriteria(typeof(Customer));
crit.SetMaxResults(50);
var customers = crit.List<Customer>();
return customers;
}
/// <summary>
/// 缩小结果集范围
/// </summary>
/// <returns></returns>
public IList<Customer> Narrowing()
{
//一个查询条件(Criterion)是NHibernate.ICriterion接口的一个实例。
//类NHibernate.Expression.Expression定义了获得一些内置的ICriterion类型的工厂方法。 var customers = _session.CreateCriteria(typeof(Customer))
.Add(Restrictions.Like("Firstname", "YJing%"))
.Add(Restrictions.Between("Lastname", "A%", "Y%"))
.List<Customer>(); //表达式(Expressions)可以按照逻辑分组
//IList<Customer> customers = _session.CreateCriteria(typeof(Customer))
// .Add(Restrictions.Like("Firstname", "YJ%"))
// .Add(Restrictions.Or(
// Restrictions.Eq("Lastname", "L%"),
// Restrictions.IsNull("Lastname")
// ))
// .List<Customer>(); //IList<Customer> customers = _session.CreateCriteria(typeof(Customer))
// .Add(Restrictions.In("Firstname", new string[] { "YJing", "YJingLee", "Y" }))
// .Add(Restrictions.Disjunction()
// .Add(Restrictions.IsNull("Lastname"))
// .Add(Restrictions.Eq("Lastname", "Lee"))
// .Add(Restrictions.Eq("Lastname", "xyz"))
// ).List<Customer>(); //预制的条件类型(Expression的子类)。可以直接嵌入SQL。
//{alias}是一个占位符,它将会被所查询实体的行别名所替代
//Parameter paramName = new Parameter("someName", new StringSqlType());
//IList<Customer> customers = _session.CreateCriteria(typeof(Customer))
// .Add(Expression.Sql(
// new SqlString(new object[]{
// "lower({alias}.Lastname) like lower(","Lastname",")"}), "YJing%", NHibernateUtil.String))
// .List<Customer>();
return customers;
}
/// <summary>
/// 排序Order by
/// </summary>
/// <returns></returns>
public IList<Customer> Order()
{
//使用ICriteria.Order对结果集排序,true=asc,false=desc
return _session.CreateCriteria(typeof(Customer))
.Add(Restrictions.Like("Firstname", "Y%"))
.AddOrder(new NHibernate.Criterion.Order("Lastname", true))
.AddOrder(new NHibernate.Criterion.Order("Firstname", false))
.List<Customer>();
}
#endregion
2. 实例学习
#region 实例学习
/// <summary>
/// 利用CriteriaAPI按Firstname查询顾客
/// </summary>
/// <param name="firstname"></param>
/// <returns>顾客列表</returns>
public IList<Customer> UseCriteriaAPI_GetCustomersByFirstname(string firstname)
{
//NHibernate1.2写法
//return _session.CreateCriteria(typeof(Customer))
// .Add(new NHibernate.Expression.EqExpression("Firstname", firstname))
// .List<Customer>(); //NHibernate2.0写法
//return _session.CreateCriteria(typeof(Customer))
// .Add(Expression.Eq("Firstname", firstname))
// .List<Customer>();
//使用Name封装:.Add(Restrictions.Eq("Name.Firstname", firstname))
return _session.CreateCriteria(typeof(Customer))
.Add(Restrictions.Eq("Firstname", firstname))
.List<Customer>();
}
/// <summary>
/// 利用CriteriaAPI按Firstname和Lastname查询顾客
/// </summary>
/// <param name="firstname"></param>
/// <param name="lastname"></param>
/// <returns></returns>
public IList<Customer> UseCriteriaAPI_GetCustomersByFirstnameAndLastname(string firstname, string lastname)
{
//NHibernate1.2写法
//return _session.CreateCriteria(typeof(Customer))
// .Add(new NHibernate.Expression.EqExpression("Firstname", firstname))
// .Add(new NHibernate.Expression.EqExpression("Lastname", lastname))
// .List<Customer>(); //NHibernate2.0写法
//使用Name封装:.Add(Restrictions.Eq("Firstname", firstname))
return _session.CreateCriteria(typeof(Customer))
.Add(Restrictions.Eq("Firstname", firstname))
.Add(Restrictions.Eq("Lastname", lastname))
.List<Customer>();
}
/// <summary>
/// 利用CriteriaAPI获取顾客ID大于CustomerId的顾客
/// </summary>
/// <param name="customerId">顾客ID</param>
/// <returns>顾客列表</returns>
public IList<Customer> UseCriteriaAPI_GetCutomersWithIdGreaterThan(int customerId)
{
//NHibernate1.2写法
//return _session.CreateCriteria(typeof(Customer))
// .Add(new NHibernate.Expression.GtExpression("CustomerId", customerId))
// .List<Customer>(); //NHibernate2.0写法
return _session.CreateCriteria(typeof(Customer))
.Add(Restrictions.Gt("CustomerId", customerId))
.List<Customer>();
}
#endregion
由于时间的仓促,这里粘贴了主要的代码片段
跟我学 NHibernate (一)的更多相关文章
- 大家一起来学 NHibernate+NUnit (VS2012+SQL Server2008)
大家一起来学 NHibernate+NUnit (VS2012+SQL Server2008) 分类: C#2013-08-10 18:47 1589人阅读 评论(5) 收藏 举报 NHibernat ...
- 菜鸟学Nhibernate 之路---(1)
首先说一下我为什么要学这个Nhibernate,现在在公司做项目后台的逻辑层都是用动软生成的简单三层,搞来搞去都是这些东西,代码冗余量很大,每个类方法基本上都一样,真是纯正的码农,虽然后来我也尝试使用 ...
- 跟我学 NHibernate (三)
在使用 NHibernate 时,一定要将Mapping 映射文件,也就是 xml 文件的编译方式设置成 嵌入式,这是因为在 NHibernate 启动时,它会主动的到项目的启动目录中寻找 被设置为嵌 ...
- 跟我学 NHibernate (二)
1. 在 NHibernate 中使用事务, 主要代码如下: #region 事务 public IList<Customer> GetAll() { // 开启事物 using (ITr ...
- 华丽的NHibernate
华丽的NHibernate http://www.cnblogs.com/kissdodog/archive/2013/02/21/2919886.html 华丽的NHibernate NHibern ...
- NHibernate 数据查询之Linq to NHibernate
刚学NHibernate的时候觉得,HQL挺好用的,但是终归没有与其他技术相关联,只有NHibernate用到,一来容易忘记,二来没有智能提示,排除错误什么的都不给力,直到看到一个同事用Linq to ...
- NHibernate 数据查询之Linto to NHibernate (第八篇)
NHibernate 数据查询之Linto to NHibernate (第八篇) 刚学NHibernate的时候觉得,HQL挺好用的,但是终归没有与其他技术 相关联,只有NHibernate用到,一 ...
- 耗时两月,NHibernate系列出炉
写在前面 这篇总结本来是昨天要写的,可昨天大学班长来视察工作,多喝了点,回来就倒头就睡了,也就把这篇总结的文章拖到了今天. nhibernate系列从开始着手写,到现在前后耗费大概两个月的时间,通过总 ...
- 从零开始学 Java - 我放弃了 .NET ?
这不是一篇引起战争的文章 毫无疑问,我之前是一名在微软温暖怀抱下干了近三年的 .NET 开发者,为什么要牛(sha)X一样去搞 Java 呢?因为我喜欢 iOS 阿!哈哈,开个玩笑.其实,开始学 Ja ...
随机推荐
- C#生成二维码示例
其实现在二维码越来越流行,网上也有很多生成二维码的类库.写一下WEB生成二维码注意事项吧! 目前C#生成二维码大部分都是使用ThoughtWorks.QRCode或者ZXing类库生成,主要说一下Th ...
- java中用中国网建提供的SMS短信平台发送短信
接下来的项目需求中提到需要短信发送功能,以前没有做过,因此便在网上搜了一下.大体上说的都是有三种方法,分别是sina提供的webservice接口.短信mao和中国网建提供的SMS短信平台. 这三种方 ...
- activiti自定义流程之Spring整合activiti-modeler5.16实例(八):完成个人任务
注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建 (2)创建流程模型:activiti自定义流程之Spring ...
- SOA_环境安装系列5_Oracle ADF安装SOA Extensions(案例)
2015-01-02 Created By BaoXinjian
- RAC_Oracle集群服务安装Grid Infrastructure(案例)
2015-01-24 Created By BaoXinjian Thanks and Regards
- centos更改默认语言
centos7以下版本: vim /etc/sysconfig/i18n 7以上版本:
- android之Widget01
ExampleAppWidgetProvider.java package com.example.mars_2600_widget01; import android.appwidget.AppWi ...
- bootstrap-导航、选项卡
导航: <!-- nav 导航的基础样式 --> <div class="container"> <div class="row" ...
- 在windows下使用linux命令
<转:http://www.cnblogs.com/adgnat/archive/2011/07/16/2108098.html> 使用过linxu的伙计估计都会喜欢上linux各种各样强 ...
- Spring 的 BeanPostProcessor接口实现
今天学习了一下Spring的BeanPostProcessor接口,该接口作用是:如果我们需要在Spring容器完成Bean的实例化,配置和其他的初始化后添加一些自己的逻辑处理,我们就可以定义一个或者 ...