IbatisNet初学者教程

一、什么是 IbatisNet   :

应该有很多人都听说过Ibatis吧,没错IbatisNet就是Ibatis在.net上的一个移植版本,所以它们俩基本是差不多的。所以IbatisNet自然也是一个轻量级的ORM框架,于是我们又想起来了hibnate和Nhibnate,学习了IbatisNet 
,我会与 Nhibnate做一个简单的对比。

严格的来说IbatisNet并不是一种很正统的ORM解决方案。因为它不像NHibernate那样,具备全自动的数据操作,包括查询,插入,更新,删除,也没有像它那样,与数据库的约束关系有紧密的联系。IbatisNet为我们提供了一种更为灵活的方便的可控的方式去实现类似与ORM的解决方案,在这里我们需要自己写全部的Sql语句,这样有好处也有坏处,好处是:

1,允许sql以最自然的方式书写,没有字符串拼接,没有参数设置,没有结果获取。对应用程序的代码没有任何的影响。

2,支持对存储过程的直接调用,业务逻辑从数据库中分离出来,程序有更强的移植性。

3,IbatisNet支持动态sql来处理查询。

最大的缺点就是我们还需要编写大量的sql语句,但是值得感到高兴的是,我们只需要提供这些SQL语句,和为它提供它所需的参数外,接下来的事情就无需我们参与了。这也是iBatis最核心的功能,它会根据具体传进来的参数值,动态生成一条可执行的SQL语句并且为这些SQL参数提供不同的具体值。然后根据配置好的数据访问驱动,自动为DbCommand添加DbParameter,自动执行SQL语句,使用IDataReader返回出数据集,生成并返回一个或多个强类型数据类对象。

二、iBATIS对于工程是不是最好的选择?

iBATIS是一共数据映射工具,他的作用就在把数据库查询与对象的属性间建立映射关系,如果将要开发的工程师基于业务对象(也包括数据字典对象),那么iBATIS可以算是个好的选择了,当应用程序进行分层设计实现时,它更是个好的选择,这样的话,业务层可以和用户界面层分开。

在上述情况下Object/RelationalMapping(OR/M)工具也是个好的选择,如NHibernate,但是iBATIS不是一个实体关系映射工具,他仅用于帮助程序人员和sql语句或者存储过程间的映射,如果在实体和数据库表之间存在映射关系的话,OR/M是个很好的工具,但是若映射关系是实体和数据库视图间的对应,则选择OR/M并不是很合适。如果能工编写出确定的数据库中的数据列和对象之间存在对应关系的sql语句或者存储过程。则无论数据库中的数据是以哪种形式存储的,iBATIS都可以很好的支持。

一般来讲,下述情况比较适合选择OR/M工具:

(1)对数据库有完全的控制。

(2)团队中没有数据库管理员;

(3)需要把数据库之外的问题域看做一个对表格;

       而在下属情况,比较适合选择iBATIS:

(1)对数据库没有完全的控制,或者需要在数据库重构之后能够当做原来的数据库,继续合法访问这个它

(2)团队中有数据库管理员;

(3)数据库用于模拟问题域,应用程序的主要功能是帮助用户使用数据库模型。

 三、与hibernate简单的比较:

(1)Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。

Hibernate的缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行,但是Hibernate现在已经是主流O/R Mapping框架,从文档的丰富性,产品的完善性,版本的开发速度都要强于iBATIS。

(2)iBATIS入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。

iBATIS的缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。当系统属于二次开发,无法对数据库结构做到控制和修改,那iBATIS的灵活性将比Hibernate更适合。系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。在这种情况下iBATIS会有更好的可控性和表现。

(3)iBatis 可以进行细粒度的优化

比如说我有一个表,这个表有几个或者几十个字段,我需要更新其中的一个字段,iBatis 很简单,执行一个sql UPDATE TABLE_A SET column_1=#column_1# WHERE id=#id# 但是用 Hibernate 的话就比较麻烦了,缺省的情况下 hibernate 会更新所有字段。 当然我记得 hibernate 有一个选项可以控制只保存修改过的字段,但是我不太确定这个功能的负面效果。

例如:我需要列出一个表的部分内容,用 iBatis 的时候,这里面的好处是可以少从数据库读很多数据,节省流量SELECT ID, NAME FROM TABLE_WITH_A_LOT_OF_COLUMN WHERE ...一般情况下Hibernate 会把所有的字段都选出来。比如说有一个上面表有8个字段,其中有一两个比较大的字段,varchar(255)/text。上面的场景中我为什么要把他们也选出来呢?用hibernate 的话,你又不能把这两个不需要的字段设置为lazy
load,因为还有很多地方需要一次把整个 domain object 加载出来。这个时候就能显现出ibatis 的好处了。如果我需要更新一条记录(一个对象),如果使用 hibernate,需要现把对象 select 出来,然后再做 update。这对数据库来说就是两条sql。而iBatis只需要一条update的sql就可以了。减少一次与数据库的交互,对于性能的提升是非常重要。

如何使用:

这个教程性的东西我就不写了,给大家推荐一个系列教程吧:

随笔分类 - 跟初学者学习IbatisNet(http://www.cnblogs.com/woaixiaozhi/category/499999.html

希望我这篇站在别人肩膀上的文章对你有所帮助。

时间: 2025-01-01 15:52:12

IbatisNet初学者教程的相关文章

Apache Solr初学者教程(入门之旅)

Apache Solr初学者教程(入门之旅) 写在前面:本文涉及solr入门的各方面,请逐行阅读,相信能帮助你对solr有个清晰全面的了解和使用. 在Apache Solr初学者教程的这个例子中,我们将讨论有关如何安装最新版本的Apache Solr,并告诉你如何配置它.此外,我们将告诉你如何进行使用solr的样本数据文件索引.Apache Solr支持不同格式,包括各种数据库,PDF文件,XML文件,CSV文件等等.在这个例子中,我们的索引将研究如何索引数据从一个CSV文件. 我们首选的这个例

Github初学者教程(一)

如果你是一名程序员,或者是相关专业的学生,那么Github你不应不知道.很多开源组织和大神,会选择在Github这个平台上,发布他们的开源项目,学会使用Github将能够给你的学习和工作带来巨大帮助!可是Github的使用依靠的是Git命令或者是客户端,对于初学者来说入门有一点麻烦,网上相关的教程很多都是copy别人的,学起来会遇到很多不明白的地方,于是有了这一篇博客. 一.注册Github账号  github官网地址:https://github.com/,有了账号之后就可以建立创建仓库了(C

IBatisNet使用教程

 1.是数据持久层,对应.NET方向的有Ibatis.NET,只要用来处理数据库表结构和程序实体之间映射,ado.net是用来处理和数据库直接通信的,取出数据(object,int,string,dataset,datatable等常规类型),通常程序中如果用到MOEDL实体,都需要手动写代码去做类型转换(把datatable的字段赋值到model对应字段),用了数据持久层,这一部就可以省略了,Ibatis.NET可以直接把数据库表字段映射为实体模型,操作简便了. 2.IBatis.net 是2

Google Tango初学者教程

Getting Started with the Tango Java API In this tutorial, we'll go through setting up your build environment and compiling and running your first "Hello Tango" project using the Java API, which will run sample code and display the pose data from

初学者教程之命名空间,范围解析及LEDB规则

2014年5月12日 Sebastian Raschka编写 这是一篇关于采用LEGB规则实现Python变量命名空间及范围解析的简短教程.下面章节将会提供简短的可以说明问题的示例代码块来简要阐述问题.您可以简单的从头至尾阅读本教程,但我鼓励您去执行这些代码段.你可以复制粘贴这些代码段,但是为了方便您也可以下载IPython笔记. 章节 ? 章节 ? 目标 ? 命名空间和范围介绍 o 命名空间 o 范围 o 提示: o 通过LEGB规则解析变量名的范围 ?1. LG-本地和全局范围 o 原因:

使用Visual Studio开发ASP.NET Core MVC and Entity Framework Core初学者教程

原文地址:https://docs.asp.net/en/latest/data/ef-mvc/intro.html The Contoso University sample web application demonstrates how to create ASP.NET Core 1.0 MVC web applications using Entity Framework Core 1.0 and Visual Studio 2015. Contoso University网络应用的案

Gradle用户指南之初学者教程(三)

写在前面的话: 博主最近在学习Android Studio相关的东西.Gradle相对于我这个从Eclipse转过来的Android开发者,也算是一个全新的事物.但它却承担着Android构建系统中相当重要的一环.本着与人方便,自己方便的精神,觉得有必要翻译一下<Gradle User Guide>中的Tutorials相关部分.由于英语水平相当有限,请大家多多指教. 文章地址:http://blog.csdn.net/mikulee/article/details/45478177 英文原文

SharpDX初学者教程第2部分:创建窗口

原文 http://www.johanfalk.eu/blog/sharpdx-tutorial-part-2-creating-a-window 在第二篇教程中,我们将介绍如何创建一个稍后将呈现的简单窗口. 首先,我们将创建一个名为的新类Game.右键单击项目并选择“添加 - >类...”,将文件命名为“Game.cs”. 首先,我们将类RenderForm 设为public,然后添加一个带有两个变量来保存窗口客户端大小的宽度和高度(渲染大小,不包括窗口的边框).该RenderForm 班还需

SharpDX初学者教程第4部分:绘制三角形

原文 http://www.johanfalk.eu/blog/sharpdx-beginners-tutorial-part-4-drawing-a-triangle 现在我们有了一个Direct3D初始化的窗口,现在是时候绘制一些东西了,就像所有其他教程一样,我们也将开始绘制一个三角形!要渲染我们的第一个三角形,实际上我们必须添加很多部分,所以让我们开始吧. 1.顶点 要创建三角形,我们将使用顶点.顶点是3D空间中的精确点,也可以包含其他信息(我们将在后面的教程中看到).目前,我们的顶点仅由