Nhibernet 的基本语法:

 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 #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 #region 事务
public IList<Customer> GetAll()
{
// 开启事物
using (ITransaction tx = _session.BeginTransaction())
{
try
{
//提交事务
tx.Commit();
return null;
}
catch (HibernateException ex)
{
  // 回滚事务
tx.Rollback();
throw ex ;
}
}
} #endregion #region 添加、 删除、更新对象 public int Add(Customer model)
{
int id =(int) _session.Save(model);
_session.Flush();
return id;
} public void Delete ( Customer model)
{
_session.Delete(model);
_session.Flush();
} public void Update( Customer model)
{
// 更新
_session.Update(model); // 更新或保存 •检查这个对象是否已经存在Session中。如果对象不在,调用Save(object)来保存。如果对象存在,检查这个对象是否改变了。 如果对象改变,调用Update(object)来更新。 //_session.SaveOrUpdate(model);
_session.Flush();
} #endregion #region 条件查询 (Criteria Query) // 创建 Criteria 实例 使用ISession接口的CreateCriteria方法创建了NHibernate.ICriteria接口一个特定的持久化类的查询实例,也可以说ISession是用来制造Criteria实例的工厂
public IList<Customer> Creater()
{
ICriteria cria = _session.CreateCriteria(typeof(Customer));
cria.SetMaxResults(50);
IList<Customer> list = cria.List<Customer>();
return list;
} // 结果集限制数据
//使用ICriteria接口提供的Add方法添加Restrictions类中约束表达式可以限制一些结果集的作用。
public IList<Customer> Norrawing()
{ IList<Customer> customers = _session.CreateCriteria(typeof(Customer))
.Add(Restrictions.Like("FirstName","y%"))// 查询 FirstName like y%
.Add(Restrictions.Eq("FirstName", "yang ")) // 查询 FirstName=Yang
.Add(Restrictions.Between("LastName","%m","_n")) // 查询 LastName between %m _n
.List<Customer>(); return customers; } // 结果集排序
// 使用ICriteria.Order对结果集排序,第二个参数true代表asc,false代表desc。例如下面例子查询Customer对象按FirstName降序、Lastname升序。
public IList<Customer> Orderss()
{
IList<Customer> customers = _session.CreateCriteria(typeof(Customer))
.Add(Restrictions.Like("FristName","yangming"))
.AddOrder(new Order("FirstName",false)) /// FirstName 降序排序
.AddOrder(new Order("LastName",true)) // LastName 升序排序
.List<Customer>(); return customers;
} /*
* 条件查询同样支持关联查询、动态关联抓取(在介绍一对多,多对多关系中阐述),投影、聚合和分组,离线(detached)查询和子查询是2.0版新增加的内容
* */ // 根据 示例查询(Query By Example) //根据示例查询(QBE,Query By Example)是条件查询的一种特殊情况,NHibernate.Criterion.Example类根据你指定的实例创造查询条件。其典型的用法:创建一个Example实例;在Example实例上设置值;根据Example和设置NHibernate返回其对象集合。 public IList<Customer> Query()
{
Customer customer = new Customer { Firstname="yangyang", Lastname="wang"}; return _session.CreateCriteria(typeof(Customer))
.Add(Example.Create(customer))
.List<Customer>();
} //可以自行调整Example使之更实用:
public IList<Customer> Query(Customer customer)
{
Example exa = Example.Create(customer)
.IgnoreCase()
.EnableLike()
.SetEscapeCharacter('&'); return _session.CreateCriteria(typeof(Customer))
.Add(exa)
.List<Customer>();
} #endregion #region 查询 NHibernate查询语言(HQL) public IList<Customer> ListAll()
{
return _session.CreateCriteria(" from Customer ")
.List<Customer>();
} public IList<Customer> ListAll2()
{ return _session.CreateCriteria(" From Customer as c ")
.List<Customer>(); // group by 子句
//return _session.CreateCriteria("select * from Customer group by firstname ")
//.List<Customer>(); // distinct 子句
// return _session.CreateQuery("select distinct c.Firstname from Customer c")
//.List<Customer>(); // where 子句 //return _session.CreateQuery("from Customer c where c.Firstname='YJing'")
// .List<Customer>(); // 带参数的 where 子句
// // return _session.CreateQuery("from Customer c where c.CustomerId > :cid")
//.SetInt32("cid", 1)
//.List<Customer>(); } #endregion #region 分页查询 ISessionFactory SessionFactory; // 分页功能
public IList<Customer> GetAll(int currentPage, int pageSize)
{
// 获取当前 session
ISession curSession = SessionFactory.GetCurrentSession();
ICriteria cria = _session.CreateCriteria(typeof(Customer));
// 分页
var model = cria.SetFetchSize(pageSize).SetFirstResult(currentPage).List<Customer>(); return model;
} // 分页查询
//在Nhibernate里实现分页用 SetFirstResult 和SetMaxResults实现,SetFirstResult 简单的理解就是从第几条记录开始,SetMaxResults是取几条记录
private IList<Customer> GetRecord(IList<ICriterion> queryConditions, int pageIndex, int pageSize, string orderField, bool isAscending)
{ ICriteria criteria = _session.CreateCriteria(typeof(Customer));
foreach (ICriterion cri in queryConditions)
{
criteria.Add(cri);
} //记录总数
int skipCount = (pageIndex - 1) * pageSize;
criteria.AddOrder(new Order(orderField, isAscending));
criteria.SetFirstResult(skipCount).SetMaxResults(pageSize);
return criteria.List<Customer>(); //SQL查询
//IList<Customer> customerList = Session.CreateSQLQuery("SELECT * FROM Customer")
// .SetFirstResult(pageStart*pageLimit)
// .SetMaxResults(pageLimit)
// .SetResultTransformer(Transformers.AliasToBean<Customer>()).List<Customer>();
//return customerList; IList<Customer> customers = _session.CreateSQLQuery("")
.SetFirstResult(pageIndex * pageSize)
.SetMaxResults(pageSize)
.SetResultTransformer (NHibernate.Transform.Transformers.AliasToBean<Customer>()).List<Customer>(); return customers;
} #endregion

ORM Nhibernet 框架的 CRUD 操作的更多相关文章

  1. ORM PetaPoco 框架的 CRUD 操作

    PetaPoco 的查询操作 public IEnumerable<T> GetAll(string sqlString, object[] obj) { try { IEnumerabl ...

  2. ORM对象关系映射之使用GreenDAO进行CRUD操作

    在Android中,我们都知道使用的数据库是SQLite,而使用这种原生的数据库非常繁琐,它对表的管理和进行CRUD操作都需要我们写sql语句,在进行多表关联的操作上,更是需要写一堆sql,而且维护起 ...

  3. Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图的数据操作

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图实体类映射 下一篇:Farseer.net轻量级ORM开源 ...

  4. Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程数据操作

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程实体类映射 下一篇:Farseer.net轻量级ORM ...

  5. Farseer.net轻量级ORM开源框架 V1.x 入门篇:表的数据操作

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:表实体类映射 下一篇:Farseer.net轻量级ORM开源框 ...

  6. Mybatis框架 使用接口Mapper实现数据库的crud操作

    Mybatis的Mapper接口方式实现简单crud操作: 1.创建实体类 与数据库对应 我的实体类是<Student>   package com.hxzy.mybatis.pojo; ...

  7. 【SSH三大框架】Hibernate基础第五篇:利用Hibernate完毕简单的CRUD操作

    这里利用Hibernate操作数据库完毕简单的CRUD操作. 首先,我们须要先写一个javabean: package cn.itcast.domain; import java.util.Date; ...

  8. Mybatis框架学习总结-使用Mybatis对表执行CRUD操作

    使用MyBatis对表执行CRUD操作——基于XML的实现 1.创建(create)用户:在userMapper.xml文件中增加: <!-- 创建用户Create --> <ins ...

  9. SSM框架之Mybatis(2)CRUD操作

    Mybatis(2)CRUD 1.基于代理Dao实现CRUD操作 使用要求: 1.持久层接口(src\main\java\dao\IUserDao.java)和持久层接口的映射配置(src\main\ ...

随机推荐

  1. 第十五篇 make中的隐式规则概述

      前面我们讲到了makefile的依赖拆分的知识,现在可以引申出这样一个问题,如果同一个目标的不同命令拆分的写到不同地方会发生什么?下面我们给出程序和执行结果:   可见后面的命令会覆盖前面的命令, ...

  2. [LeetCode&Python] Problem 821. Shortest Distance to a Character

    Given a string S and a character C, return an array of integers representing the shortest distance f ...

  3. .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件

    你可以使用临界区(Critical Section).互斥量(Mutex).信号量(Semaphores)和事件(Event)来处理线程同步.然而,在编写一些异步处理函数,尤其是还有 async 和 ...

  4. 《DSP using MATLAB》Problem 4.3

    代码: %% ------------------------------------------------- %% 1 x(n)=2δ(n-2)+3u(n-3) %% -------------- ...

  5. dbt seed 以及base ephemeral使用

    seed 可以方便的进行数据的导入,可以方便的进行不变数据(少量)以及测试数据的导入, base 设置为 ephemeral(暂态),这个同时也是官方最佳实践的建议 项目依赖的gitlab 数据可以参 ...

  6. Apache2.4配置(全)

    http://blog.csdn.net/u012291157/article/details/46492137

  7. JS 得细心的坑位

    <script> function test(link) { link = link || 'none'; alert(link); } function test2(){ var lin ...

  8. 常见MQ流行度比较

    MQ的流行度跟它的特性和应用场景密切相关,站在当下来看,kafka最火,rabbitmq用的也很多,ActiveMQ作为经典mq选择用它入门的也不少.

  9. Mac OSX 正确地同时安装Python 2.7 和Python3

    出处:http://www.jianshu.com/p/51811fa24752 python3 默认安装位置:/usr/local/Cellar/python3

  10. Array、ArrayList 区别

    ArrayList可以算是Array的加强版,(对array有所取舍的加强). 存储内容比较(可包含元素的类型不同.数组要求存储同种类型): Array数组可以包含基本类型和对象类型, ArrayLi ...