ORM Nhibernet 框架的 CRUD 操作
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 操作的更多相关文章
- ORM PetaPoco 框架的 CRUD 操作
PetaPoco 的查询操作 public IEnumerable<T> GetAll(string sqlString, object[] obj) { try { IEnumerabl ...
- ORM对象关系映射之使用GreenDAO进行CRUD操作
在Android中,我们都知道使用的数据库是SQLite,而使用这种原生的数据库非常繁琐,它对表的管理和进行CRUD操作都需要我们写sql语句,在进行多表关联的操作上,更是需要写一堆sql,而且维护起 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图的数据操作
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图实体类映射 下一篇:Farseer.net轻量级ORM开源 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程数据操作
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:存储过程实体类映射 下一篇:Farseer.net轻量级ORM ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:表的数据操作
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:表实体类映射 下一篇:Farseer.net轻量级ORM开源框 ...
- Mybatis框架 使用接口Mapper实现数据库的crud操作
Mybatis的Mapper接口方式实现简单crud操作: 1.创建实体类 与数据库对应 我的实体类是<Student> package com.hxzy.mybatis.pojo; ...
- 【SSH三大框架】Hibernate基础第五篇:利用Hibernate完毕简单的CRUD操作
这里利用Hibernate操作数据库完毕简单的CRUD操作. 首先,我们须要先写一个javabean: package cn.itcast.domain; import java.util.Date; ...
- Mybatis框架学习总结-使用Mybatis对表执行CRUD操作
使用MyBatis对表执行CRUD操作——基于XML的实现 1.创建(create)用户:在userMapper.xml文件中增加: <!-- 创建用户Create --> <ins ...
- SSM框架之Mybatis(2)CRUD操作
Mybatis(2)CRUD 1.基于代理Dao实现CRUD操作 使用要求: 1.持久层接口(src\main\java\dao\IUserDao.java)和持久层接口的映射配置(src\main\ ...
随机推荐
- Python中的import
模块(module):用来从逻辑(实现一个功能)上组织Python代码(变量.函数.类),本质就是*.py文件.文件是物理上组织方式"module_name.py",模块是逻辑上组 ...
- 批量解帧视频文件cpp
前言 将多个视频文件进行解帧. 实现过程 1.批量获取文件路径: 2.对某个视频文件进行解帧: 代码 /************************************************ ...
- 如何释放vector变量
std::vector<cv::Point> probp; std::vector<int> plabel; plabel.clear(); std::vector<in ...
- Spring boot 2.1.0 -- swagger2 整合
依赖版本信息 Spring boot 2.1.0.RELEASE swagger2 2.7.0 1. mvn 配置 pom.xml 包引入 <!--swagger2依赖--> <d ...
- Markdown的写法
这里只介绍Markdown的书写格式.在github中显示出来. 当你看到下面两张图片时,你会发现区别还是蛮大的. 标题: 首先>就是最左边的那条竖线,但是=(最高阶标题)和-(第二阶标题). ...
- iTween的用法总结
Unity3D插件-iTween的基本用法 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Introd ...
- MySQL Disk--磁盘相关参数
/sys/block/sda/queue/nr_requests 磁盘队列长度.默认只有 128 个队列,可以提高到 512 个.会更加占用内存,但能更加多的合并读写操作,速度变慢,但能读写更加多的量 ...
- oracle 变量作用域
以下为测试 代码块DECLARE v_i number := 100; v_p VARCHAR2(200) := 'a';BEGIN DECLARE v_i number := 999; ...
- 详解SID之终结篇
今天测试某款监控软件时遇到一个比较棘手的问题,这款软件需要在被监控端安装客户端程序.成功在第一个节点安装好客户端后问题出现了,在其他节点安装时报错无法安装.软件报的错误信息无从下手且系统日志也看不出什 ...
- python3 获取int最大值
python2 中获取int最大值 import sys i = sys.maxint print i 但是在python3中,报错: AttributeError: module 'sys' has ...