跟我学 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 ...
随机推荐
- Puppet Agent/Master HTTPS Communications
The agent/master HTTP interface is REST-like, but varies from strictly RESTful design in several way ...
- C++编程新思维中的技巧
1.编译器断言 技巧大致跟后面的一样,都是利用偏特化,但是在C++ 0X里面已经有static_assert,所以感觉这东西也没什么用处了,更多的只是开阔眼界 2.偏特化 就是专门对一个类型去进行特殊 ...
- Perl调用外部命令的方式和区别
主要的方式简述如下:1. system("command");使用该命令将开启一个子进程执行引号中的命令,父进程将等待子进程结束并继续执行下面的代码. 2. exec(" ...
- 黄聪:Wordpress 模版技术手册 - WordPress Theme Technical manuals
WordPress基本模板文件 一套完整的WordPress模板应至少具有如下文件: style.css : CSS(样式表)文件 index.php : 主页模板 archive.php : Arc ...
- Redis几个认识误区(转)
此文的作者是新浪微博平台架构师杨卫华(timyang)大师,如果关注了新浪一些牛人微博的同学应该知道,timyang前段时间正在对Redis进行一些研究和测试,也分享出了不少成果.下面一篇文章相信是t ...
- java面试常考题
基础知识: 1.C++或Java中的异常处理机制的简单原理和应用. 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常.违反语义规则包括2种情况.一种是JAVA类库 ...
- BestCoder Round #87 LCIS(dp)
LCIS 要用dp的思路想这题 [题目链接]LCIS [题目类型]dp &题意: 给定两个序列,求它们的最长公共递增子序列的长度, 并且这个子序列的值是连续的,比如(x,x+1,...,y−1 ...
- AOP 下的权限控制实现
摘要 面向方面的编程(AOP)是一种新的编程技术,它弥补了面向对象的编程(OOP)在跨越模块行为上的不足.AOP 引进了 Aspect,它将影响多个类的行为封装到一个可重用模块中,它允许程序员对横切 ...
- java泛型的使用
package com.wzh.test.generic; import java.util.ArrayList; import java.util.HashMap; import java.util ...
- Mybatis where 1=1 和 <where>标签
<select id="selSampleListByIDX4" resultMap="BaseResultMap" parameterType=&quo ...