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工 ...
随机推荐
- linux命令 chattr超级权限控件
linux命令:chattr 1.作用 修改ext2和ext3文件系统属性(attribute),使用权限超级用户. linux命令:chattr 1.作用修改ext2和ext3文件系统属性(at ...
- sort +awk+uniq 统计文件中出现次数最多的前10个单词
实例cat logt.log|sort -s -t '-' -k1n |awk '{print $1;}'|uniq -c|sort -k1nr|head -100 统计文件中出现次数最多的前10个单 ...
- ios Base64编解码工具类及使用
为了避免明码传递http内容,可以用base64编码后传输,收到方再解码,也方便了2进制数据的字符串式传输. 对于ios来说,google给提供了一个很好的工具类,方便进行base64编解码,当然也可 ...
- python 开发webService
最近在学习用python 开发webservice,费了半天时间把环境搭好,记录下具体过程,以备后用. 首先系统上要有python.其次要用python进行webservice开发,还需要一些库: 1 ...
- Linux学习笔记(2)-用户和用户组
用户(user)和用户组(group)概念 linux是一个多用户操作系统,他允许多个用户登录linux系统进行各自不同的操作.为了方便管理用户不同的权限,组的概念应用而生,一个组可以包含多个用户,共 ...
- 归档 NSKeyedArchiver
复杂对象无法象 NSString,NSArray等简单对象一样直接通过 writeToFile 实现持久化,当对复杂对象进行持久化时需要将其转化为 NSData (归档),但获取数据时,将 NSDat ...
- 各系统下设置输入法按键为ctrl+shift+space
xp=====(一直找不到..原来右边是可以下拉的).. linux ibus----- 设置---直接按下Ctrl+Shift+Space
- 过长文字自动换行的技巧 Word-Break Word-Wrap
在很多时候,为了防止内容过长把表格或容器撑破, 我们都需要为容器加上自动换行的功能. 实现自动换行,用CSS来实现,通常有两种方式: word-break: 取值为 normal, break-all ...
- 4.2 spring-import 标签的解析;
对于spring配置文件的编写,我想,对于经历过庞大项目的人,都有那种恐惧的心理,太多的配置文件.不过,分模块都是大多数人能想到的方法,但是,怎么分模块,那就是仁者见仁,智者见智了.我的策略是使用im ...
- Matlab划分测试集和训练集
% x是原数据集,分出训练样本和测试样本 [ndata, D] = size(X); %ndata样本数,D维数 R = randperm(ndata); %1到n这些数随机打乱得到的一个随机数字序列 ...