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工 ...
随机推荐
- V9任何页面GET调用内容分页的说明
如标题,很多人想要在网站首页或其他的页面实现分页效果,说明如下: 一般特殊页面实现分页是通过GET语句的(论坛很多牛人用修改PHPCMS系统函数来实现,个人不推荐,因为你改了系统文件,不利于官方下一步 ...
- MySQL Connector Net连接vs2012问题
最近做一.NET项目,数据库用到MySQL,可是在VS2012连接数据库是遇到问题,提示:Authentication with old password no longer supported, u ...
- fedroa 更换字体
1. 添加RPM包: rpm -Uvh http://www.infinality.net/fedora/linux/infinality-repo-1.0-1.noarch.rpm 2. 安装包 y ...
- String声明为NULL和""的区别
代码虐我千百遍,我待代码如初恋. String 声明为 NULL 则声明了一个变量不指向任何一块地址,则 length()会出现错误. 声明为"",则是一个长度为0的字符串.
- JS、C# 去除html标签
JS去除html标签 var str = "<span style="display:none;" mce_style="display:none;&qu ...
- 使用Sqlserver事务发布实现数据同步
事务的功能在sqlserver中由来已久,因为最近在做一个数据同步方案,所以有机会再次研究一下它以及快照等,发现还是有很多不错的功能和改进 的.这里以sqlserver2008的事务发布功能为例,对发 ...
- 慎用ReentrantLock
前言: 代码简洁与性能高效无法两全其美,本文章专注于并发程序的性能,如果您追求代码简洁,本文章可能不太适合,本文章属于Java Concurrency in Practice读书笔记. 在java5中 ...
- 1034: [ZJOI2008]泡泡堂BNB - BZOJ
Description 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省的代表队由n名选手组成,比赛的项目是老少咸宜的网络游戏泡泡堂.每一场比赛前,对阵 ...
- 团体程序设计天梯赛-练习集L1-015. 跟奥巴马一起画方块
L1-015. 跟奥巴马一起画方块 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 美国总统奥巴马不仅呼吁所有人都学习编程,甚至 ...
- Aimp3的播放列表 按评分排序 落雨
如图,添加评分选项,并保存,就可以在下图的选项里找到此选项,并按评分排序 效果图如下:还可以倒置,迅速使评分高的音乐排在播放列表的前面位置!! 转自百度知道: http://zhidao.baidu. ...