ibatisnet系列(一) 总览

10 篇文章 0 订阅

学习和使用 Ibatisnet 已经有一段时间了,前段时间也有写过一些与 iBatis 相关的 Blog 。也答应过一些朋友要比较全面地介绍一下 iBatis ,分享自己的学习过程和使用经验,记录一些常见且容易出现的问题。但由于前段时间一直在准备考试,而且当前的项目时间进度也比较紧,所以一直迟迟未能开始,在这里表示歉意,希望现在开始不会晚。不过最近社区(博客园)好消息不断,我发现越来越多的人开始关注 iBatis 了,并且也有热心网友在极力推广,如果您已经对它已经有一些了解了,那么更推荐您去阅读 ShanYou 的 文章,他写的文章可能更加适合您。我本人也是一名初学者,这里记录的一些东西可能不会有很多的理论知识(理论知识还不够扎实),更多的可能是突出自己学习 过程中需要很长时间来解决的一些问题,或者是个人认为特别重要,并且容易忘记的细节。水平有限,出现错误在所难免,如在这过程中不当之处敬请愿谅,并请不 啬赐教。

废话一翻后,进入今天的正题。今天的主题是 Introduction ,非官方正式介绍的中文版,更多详细的介绍请参阅官方文档。我们要使用它就必须要知道它是干什么用的,能为我们做哪些工作,开发效率如何,执行效率如何,技术难度怎么样。

提到 iBatis ,大家可能会与 ORM 技术联系起来。是的,没错,它与 ORM 技术有一定程度上的联系,但是更确切地讲,它并不是一种很正统的 ORM 解决方案。因为它不像 NHibernate 那样,具备全自动的数据操作,包括查询,插入,更新,删除;也没有像它那样,与数据库的约束关系有紧密的联系(对 NHibernate 的了解不多,如果有不妥之处,希望能留下你们的臭鸡蛋,等着下回用)。 iBatis 为我们提供了一种更为灵活的方便的可控的方式去实现类 ORM 的解决方案。我们需要自己来控制 SQL 语句,这样做有好处在于,我们可以更灵活地根据我们的需求,编写更加具备性能,功能优势的 SQL 语句,但它的缺点同样明显,我们还是需要管理和编写 SQL 语句。但是值得感到高兴的是,我们只需要提供这些 SQL 语句,和为它提供它所需的参数外,接下来的事情就无需我们参与了。这也是 iBatis 最核心的功能,也是它为我们所做最多的工作了。根据配置好的 SQL 语句和参数条件,它会动态生成一条可执行的 SQL 语句,然后根据具体传进来的参数值,为这些 SQL 参数提供不同的具体值。然后根据配置好的数据访问驱动,自动为 DbCommand 添加 DbParameter ,自动执行 SQL 语句,使用 IDataReader 返回出数据集,生成并返回一个或多个强类型数据类对象(数据集用 IList 集合对象表示)。我曾经在 Community Server 中也见过类似的返回强类型数据对象的实现,但是需要很多的代码,与直接返回 DataTable 相比,重复代码会更多。所有的这些在 iBatis 中,只需要提供一个配置文件,调用它提供的 SqlMapper 实例对象中的方法就可以很简单容易地实现了。当然你也许会说,那这样如果系统比较大的话,可能就需要很多的配置文件了。是的,又陷了另一个极端了。怎么办呢?没办法,鱼和熊掌不能兼得啊。这里还不得不重点强调一下,如果你是经常在存储过程中拼接 SQL 语句的话,那我就更加推荐你马上就开始使用 iBatis 吧。

提到数据操作,就不能不提到数据的安全性和完整性问题了,也就是数据操作的事务问题。如果你是直接使用 Ado.net 进行事务操作的话,那您可能需要写更多的代码了,当然我们可以使用 Enterprise Library 来简化我们的工作。那现在通过一段简单的代码也看一下在 iBatis 中该如何实现事务吧:

using ( IDalSession session = sqlMap.BeginTransaction() )






{



  Item item = (Item) sqlMap.QueryForObject("getItem", itemId);



  item.Description = newDescription;



  sqlMap.Update("updateItem", item);



  session.Complete();

 // Commit





}



就这么简单的代码,它就会帮我们自动管理事务了。这期间如果出现异常,我们仍然可以捕获到异常信息。


OK,

通过上面的介绍,我们已经能够了解到一个大概了。总结一下,它帮我们自动管理和执行SQL

语句,并且返回强类型的数据对象。从上面的一段简单的代码中,你可能已经感觉到了它的使用有多么的简单!并且如果需要的还能够返回生成的DbCommand

,支持我们通过它返回DataTable

或者其它的Ado

操作返回。但是,这时你会马上产生另一个疑虑了,我们的工作还是很多啊,比如编写数据类和配置文件,可能工作量并不亚于直接使用Ado.net

返回DataTable

所写的代码,并且会更加的没有技术含量。所以,对于这些的代码,我们尽量能通过一些代码生成工具(我是使用CodeSmith

)自动生成大部分,然后再根据我们需要进行修改。


再来看看执行效率吧,尽管iBatis

或多或少用到反射技术,但由于使用配置文件的形式,性能影响已经降到最低了。我曾经做过一个测试,用它添加多条记录和使用UpdateDataSet

成批提交数据(

相同的数据)

的方式进行过比较,总体时间效率不会更差,反而会更快一点。


最后不得不再提一点,它的缓存机制做得很好,相同的SQL

语句,可以根据不同的条件值,缓存用这个条件执行查询时的输出数据。它的缓存过期策略是封闭的。详细细节,相信随着深入会有所涉及。


对它的介绍就先告一段落了,下一篇将会首先介绍一下它的配置工作环境,重点在于介绍如何使用log4net

记录日志。


阿不 http://hjf1223.cnblogs.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值