Nhibernate与Dapper对比,及Nhibernate增删改和9种查询语法
1,Sql语法。
NH:HQL
Dapper:原生Sql.
点评:原生Sql可以直接放在数据库里执行,Hql不行,且Hql增加学习负担。(Hn也可以原生Sql,但好像用的不多呀)
2,开发速度。
NH:手工编写配置文件。
Dapper:使用CodeSmith批量生成。
点评:NH耗时,Dapper迅速。
3,自定义查询。
NH :
return _session.CreateQuery("select c.Firstname, count(c.Fi
rstname) from Customer c group by c.Firstname")
.List<object[]>();
Dapper:
String executeSql = @" SELECT ID, DevRequireId, PrjTypeId
FROM PrjOrder
WHERE ID = @ID ";
var conditon = new { ID = ID };
return conn.Query<PrjOrderModel>(executeSql, conditon).SingleOrDefault();
点评:Nh返回结果Object,Dapper返回实体,未查询列值为空。常用于数据表字段过多时有选择查询。
4,操作多个数据库。
NH: http://www.codeproject.com/Articles/14846/Using-NHibernate-with-Multiple-Databases
Dapper:
public static readonly string connPlmString = System.Configuration.ConfigurationManager.ConnectionStrings["PlmConnStr"].ToString();
public static readonly string connSrmString = System.Configuration.ConfigurationManager.ConnectionStrings["SrmConnStr"].ToString();
public static SqlConnection CratePlmOpenConnection()
{
var connection = new SqlConnection(connPlmString);
connection.Open();
return connection;
}
public static SqlConnection CrateSrmOpenConnection()
{
var connection = new SqlConnection(connSrmString);
connection.Open();
return connection;
}
点评:Nh配置复杂,Dapper简单易用。
5,传参:
NH: Session.CreateQuery(strSql).SetString("BuId", BuId);
Dapper:
var conditon = new { ID = id, Name = name };
return conn.Query<PrjOrderModel>(executeSql, conditon).SingleOrDefault();
点评:NH单条设置,Dapper多条设置,且不需要指定类型,类型由变量类型自动推算。
Nhibernate 九种查询示例及源码如下:
public static IList<wufei_testTb> GetAll()
{
IQuery iq = session.CreateQuery("from wufei_testTb"); return iq.List<wufei_testTb>();
} public static wufei_testTb GetById(int userId)
{
return session.Get<wufei_testTb>(userId);
} public static wufei_testTb GetByName1()
{
//返回唯一数据,如果数据有多条,程序将报错
ISession session = NHelper.GetCurrentSession();
var iq = session.CreateQuery("select t from wufei_testTb t where t.USER_ID=10000"); return iq.UniqueResult<wufei_testTb>();
} public static IList<Object[]> GetByName2()
{
//原生Sql自定义字段查询,指定返回结果,无法返回实体集
var iq = session.CreateSQLQuery("select t.USER_ID,t.USER_NAME from wufei_testTb t")
.AddScalar("USER_ID", NHibernateUtil.Int32)
.AddScalar("USER_NAME", NHibernateUtil.String);
return iq.List<Object[]>();
} public static IList GetByName3()
{
//原生Sql自定义字段查询,无法返回实体集
var iq = session.CreateSQLQuery("select t.USER_ID,t.USER_NAME from wufei_testTb t")
.AddScalar("USER_ID", NHibernateUtil.Int32)
.AddScalar("USER_NAME", NHibernateUtil.String);
return iq.List();
} public static IList<wufei_testTb> GetByName4()
{
//创建ICriteria实例,查询前50行数据
ICriteria crit = session.CreateCriteria(typeof(wufei_testTb));
crit.SetMaxResults();
IList<wufei_testTb> testList=crit.List<wufei_testTb>();
return testList;
} public static IList<wufei_testTb> GetByName5(String userName)
{
//创建ICriteria实例,模糊查询,精确查询,排序
IList<wufei_testTb> testList = session.CreateCriteria(typeof(wufei_testTb))
.Add(Restrictions.Like("USER_NAME", "%0")) //按USER_NAME模糊查询
//.Add(Restrictions.Eq("USER_NAME", userName)) //按USER_NAME精确查询
.AddOrder(new NHibernate.Criterion.Order("USER_NAME", true)) //按USER_NAME排序,第二个参数True代表asc,False代表desc
//.Add(Restrictions.Between("","",""))
.List<wufei_testTb>();
return testList;
} public static IList<wufei_testTb> GetByName6()
{
//数据库里明明有结果,但却找不出数据,奇怪,求高人指点???
wufei_testTb testSample = new wufei_testTb()
{
USER_ID=
}; var result= session.CreateCriteria(typeof(wufei_testTb))
.Add(Example.Create(testSample))
.List<wufei_testTb>(); return result;
}
源码下载地址如下:
http://download.csdn.net/detail/wufei_8898/5952481
Nhibernate与Dapper对比,及Nhibernate增删改和9种查询语法的更多相关文章
- SQL server 创建 修改表格 及表格基本增删改查 及 高级查询 及 (数学、字符串、日期时间)函数[转]
SQL server 创建 修改表格 及表格基本增删改查 及 高级查询 及 (数学.字符串.日期时间)函数 --创建表格 create table aa ( UserName varchar(50 ...
- LINQ的增删改查写法&&组合查询
.ToList();//返回一个集合,包含查到的所有值: .First();//返回查到的第一条数据,如果查不到会报错: .FirstOrDefault();返回查到的第一条数据,差不到返回一个nul ...
- 【gridview增删改查】数据库查询后lodop打印
ASP.NET中使用gridview可以很容易的把需要的数据动态显示在前台,还可以在表格里加入列进行增删改查,每次点击的时候重新加载数据,gridview也提供了分页等功能,还有一些模版让显示在前台的 ...
- JDBC 增删改查代码 过滤查询语句
package test; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; i ...
- Django框架第七篇(模型层)--多表操作:一对多/多对多增删改,跨表查询(基于对象、基于双下划线跨表查询),聚合查询,分组查询,F查询与Q查询
一.多表操作 一对多字段的增删改(book表和publish表是一对多关系,publish_id字段) 增 create publish_id 传数字 (publish_id是数据库显示的字段名 ...
- mariadb数据库(2)增删改与 单表查询
一.数据类型 MariaDB数据类型可以分为数字,日期和时间以及字符串值. 使用数据类型的原则:够用就行, 尽量使用范围小的,而不用大的 常用的数据类型 整数:int, bit 小数:decimal ...
- MyBatis的使用增删改查(两种分页查询)
文件目录 写一下每个文件的代码 UserDao.java package cn.zys.dao; import java.io.IOException; import java.util.List; ...
- 增删改查- 万能map- 模糊查询
1.编写接口 2.编写对应的mapper种的sql语句 3.测试 接口 public interface UserDao { List<User> getUserList(); //根据I ...
- Spring Data JPA基本增删改查和JPQL查询(含完整代码和视频连接)
问题:SpringDataJPA怎么使用? 一.考察目标 主要考核SpringDataJPA的用法 二.题目分析 spring data jpa 的使用步骤(下面有具体实现细节) 1.创建maven工 ...
随机推荐
- Demo学习: ColumnSort
ColumnSort 设置UniDGGrid点击表头时排序,设置方法比较麻烦且不通用,在实际开发中用处不大. 自己在项目中用了一个比较笨的办法,写了一个函数通过sql来排序: procedure TM ...
- python 判断 windows 隐藏文件/系统文件
linux 下隐藏文件是以句号 “.” 开头的文件,根据文件名即可判断是否为隐藏文件. win 下是以文件隐藏属性确定的,所以,只能通过微软的 API 获取隐藏属性来判断是否为隐藏文件. 1. win ...
- easy ui 表单ajax和from两种提交数据方法
说明: ①ajax在表单提交时需要将所有表单的控件的数据一一获取并赋值传到后台 ②form在提交时,只要给控件加name属性,在提交时就可以将表单数据提交到后台,不需要一一获取再进行赋值. ajax ...
- EXTJS 3.0 资料 控件之 html 潜入label用法
这是在Extjs 中插入html 控件label! html: "<div><label id='howMany'>您共选中了</label><br ...
- 常见架构TLB miss处理方法(转)
转自网站:http://blog.sina.com.cn/s/blog_633f462901018reb.html 0. 综述 总的来说TLB miss处理分为硬件处理和软件处理两种,硬件 ...
- HTML标签<b>与<strong>以及<i>与<em>的区别
在一般情况下,<b>和<strong>标签的显示效果一样,<i>和<em>标签的显示效果一样.那么它们的区别在哪呢?我们应该使用哪种标签呢? 在w3sc ...
- 现代浏览器原生js获取id号方法
<div id="tests" class="a b c" style="color:#f00">123</div> ...
- [转载]WCF序列化65536大小限制的问题
错误: The formatter threw an exception while trying to deserialize the message: There was an error whi ...
- PAT-乙级-1020. 月饼 (25)
1020. 月饼 (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 月饼是中国人在中秋佳节时吃的一种传统食 ...
- 【leetcode】Intersection of Two Linked Lists(easy)
Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...