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工 ...
随机推荐
- php curl基本操作
如何使用cURL的基本方法?首先,修改php.ini文件的设置,找到php_curl.dll,取消下在的注释extension=php_curl.dll,因为php默认是不开启cURL的. cURL是 ...
- PHP开发环境和软件
1/很方便的软件XAMMP集成了PHP+MYSQL+MYPHPADMIN等等软件 2/sublime text 程序员神器,都明白的 ps.如果装了vm虚拟机,80端口有时候会被占用,进程关闭就好.
- N皇后问题2
Description Examine the checkerboard below and note that the six checkers are arranged on the board ...
- mysql优化之sakila测试数据库
下载地址,选择相应的版本来进行安装测试 http://dev.mysql.com/doc/index-other.html 相关说明 http://dev.mysql.com/doc/sakila/e ...
- Linux配置Tomcat(转载)
转载自:http://www.cnblogs.com/zhoulf/archive/2013/02/04/2891633.html 安装说明 安装环境:CentOS-6.3安装方式:源码安装 软件:a ...
- objective-C 中两种实现动画的方法(转)
转发自:http://wayne173.iteye.com/blog/1250232 第一种方法: [UIView beginAnimations:@"Curl"context: ...
- 团体程序设计天梯赛-练习集L1-015. 跟奥巴马一起画方块
L1-015. 跟奥巴马一起画方块 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 美国总统奥巴马不仅呼吁所有人都学习编程,甚至 ...
- 谈谈js中for in 需要注意的地方
js中for in 可以遍历对象或数组的显性属性,也就是说我们自己定义的属性是可以遍历的,那些原型上默认已有的属性,例如:Object.prototype.toString.Object.protot ...
- Docker 监控实战
如今,越来越多的公司开始使用 Docker 了,现在来给大家看几组数据: 2 / 3 的公司在尝试了 Docker 后最终使用了它 也就是说 Docker 的转化率达到了 67%,而转化市场也控制在 ...
- 【Visual C++】一些开发心得与调试技巧
自己平时收集的一些技巧与心得,这里分享出来,普及一下知识. 1.如何在Release状态下进行调试 Project->Setting=>ProjectSetting对话框,选择Releas ...