`

中庸:没有最佳,只有最适! IBATIS,你合适的存活空间!

阅读更多

      前言:在我以前的这两篇博文:IBATIS2序:T[.WOLF]开场白IBATIS2知识点二:放出IBATIS2.3.4.8--守护IBATIS2中,我阐述了为何开IBATIS2这个栏目,以及为何需要歇息一会儿守护着IBATIS2,并且打算进一步将有关IBATIS2 GUIDE的知识点逐步粘贴出来,为守护者提供全面的IBATIS2资源之泉。但时隔这段时间,觉得很有必要先简单的阐述下IBATIS(IBATIS2/IBATIS3)合适的存活空间,以使同仁辨别您是否值得拥有IBATIS!

      摘要:在这篇博文中,我将着重阐述持久层技术发展路线,常见持久层技术如:Apache DBUtils、Spring JdbcTemplate、IBatis、Hibernate(OJB、TopLink、EJB...)的各自特点,以及他们之间的区别与联系,从而给出IBATIS合适的存活空间!

      正文

      ?常用持久层技术:Apache DBUtils、Spring JdbcTemplate、IBatis、Hibernate(OJB、TopLink...);
:DBUtils:原则上不能划分到框架技术,它提供了一些Jdbc的操作封装来简化数据查询和记录读取操作。
具备一定的ResultSet封装对象能力(java反射),相对于jdbc sql代码冗余度有所降低,用起来比较方便,曾在IBatis、Spring、Hibernate等框架出现之前被广泛采用。
QueryRunner run = new QueryRunner(dataSource);
 Person p = (Person) run.query("SELECT * FROM Person WHERE name=?", "zhangsan", new BeanHandler(Person.class)); //new BeanListHandler(TestBean.class)
在DBUtils1.3版本之前,尚无法处理SELECT userid AS id FROM osc_users,因为之前的采用getColumnName()而不是getLabelName()
:Spring_JdbcTemplate:也是提供了一些Jdbc的操作封装来简化数据查询和记录读取操作,ResultSet结果集可通过RowMapper封装成需要的JavaBean,属于Spring框架一部分,Spring框架的开创性思想在于开发的“自给主义”转变为“拿来主义”(new→delegate→di,走出硬编码,容器化组织类间依赖关系,利于解耦)。
:IBatis:“半自动化”的ORM持久层框架,包括SQL Map和DAO两部分。其特点是①、开发人员自行写SQL(支持动态SQL),可细粒度优化;②走出硬编码,集中化SQL及实体类间映射;③、“半自动化”ORM映射关注点是实体类与SQL间建立映射关系;
:Hibernate:“自动化”的ORM持久层框架,对数据库结构提供了较为完整的封装,提供了从POJO(JavaBean)到数据库表的全套映射机制,只需定义好了POJO到数据库表的映射关系,即可通过 Hibernate提供的方法完成持久层操作,不需要对 SQL 的熟练掌握, Hibernate会根据制定的存储逻辑,自动生成对应的SQL并调用JDBC接口加以执行。
其特点是①自动化ORM映射关注实体类和数据库之间建立映射关系,sql对于开发人员是不可见的,无法自行SQL优化;②、用面向对象思想操作数据库;③完成实体类与库表间映射要求较高,需设良好规划且具有绝对的控制权;

     

      ?持久层技术发展主线:(思想)不断重构提供重用、简化开发、走出硬编码、追求面向对象;但值得注意的是:改变是相对的,炒作的,永远是利益驱逐的,因为我们看到从抨击硬编码中产生了配置文件模式,而如今又抨击配置文件模式带来的不便重归硬编码的路线,比如java注解、比如以硬编码的方式使用通用配置文件来减少配置文件数量以及被抨击的两者改动不一致造成的错误。因此,需要擦亮眼睛,看清本质,正如标题所指-中庸:没有最佳,只有最适,否则,就用过犹不及的滥用之嫌!

 

      ?Spring框架为IBatis&Hibernate框架带来的好处
       Spring框架可以理解为“粘合剂”,奉行“拿来主义”组装类间依赖关系,对IBatis和Hibernate进行包装,更加简化编码,提供编程式和配置式两种事务控制模式。

 

      ?常见争论的焦点(关于选型):IBatis VS Hibernate;IBatis VS JdbcTemplate;
      Spring JdbcTemplate、IBatis、Hibernate是J2EE WEB轻量级开发最常用的持久层技术,其过渡形式可以理解为逐步走出硬编码,不断追求面向对象。她们的抽象层次越来越高,封装粒度越来越大。所以,应用她们进行开发效率越来越高。与此同时,对设计者要求也越来越高,开发者的灵活性有所限制,性能调优越来越依赖于框架自身。
     IBatis VS Hibernate:(面向数据库建模 VS 面向对象建模)老生常谈的知识点,但真正领会却不易
     Hibernate优势
:①功能强大;②数据库无关性好;③O/R映射能力强;④开发速度快;劣势:①学习门槛高:设计O/R映射要求高,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要经验和能力都很强才行;②无法SQL性能调优;③不适宜站在局外为系统提供统一的DAO实现。
     IBATIS优势:①学习门槛低;②数据库查询的自动对象绑定功能,且延续了很好的SQL使用经验,用于对象模型要求的项目相当完美;③可SQL性能调优;④适宜站在局外为系统提供统一的DAO实现;劣势:①因需自行写SQL,开发速度相对较慢;②数据库可移植性较差;③较强的灵活、可控性失去了类似Hibernate的面向对象思想。 
     IBatis VS JdbcTemplate
      ①SQL编码:IBatis集中配置,JdbcTemplate硬编码;
      ②SQL参数传递:IBatis支持Java对象参数传递,适合面向对象编程,JdbcTemplate支持Object[]方式完成占位符填充;
      ③动态SQL:IBatis支持动态SQL,JdbcTemplate不得不采用if...else硬编码模式满足此功能点;
      ④对象映射:IBatis可将查询结果自动映射成JavaBean(根据配置文件,无需写任何代码),jdbcTemplate要重复手动的RowMapper或者实现MappingSqlQuery,ResultSetExtractor完成此映射功能;
      ⑤缓存Cache:IBatis内置Cache机制。
      #DBUtils&JdbcTemplate#
      同:①采用SQL硬编码;②封装jdbc sql,简化编码;③提供对ResultSet封装功能;
      异:①JdbcTemplate存在天然的Spring框架亲和性;②JdbcTemplate借助于Spring框架,简化编码、事务控制,同时,支持编程式和配置式两种开发模式。

 

      ?IBatis略胜于Hibernate的“情”:不具备整体规划设计权,对表结构及对象映射设计不可控性,如
      ①以读取数据为主的报表系统;
      ②以后台系统为主的支撑性J2EE WEB项目(以我公司为代表的一类运营支撑性的WEB系统);
      ③以透明化的形式站在局外的角度,为后台系统实现良好的持久层;
      ④大数据量SQL性能调优。

 

      ?后台系统持久层技术要求(以我公司IDEP项目为例):
      ①持久层透明化
      ②不懂或不甚了解JAVA WEB常用的持久层技术。后台系统以C/C++为主,开发纯 JAVA的后台系统人员大多临时抽调的C/C++人员,需要透明化持久层,以降低协作开 发难度;
      ③应用简单、灵活可控,擅长SQL方式、更多过程化思想操作DB。临时抽调的C/C++人员倾向于此方式,重要的原因是一切都在可掌控之中,所以,我们设计出的持久层必须能得到平滑过渡,且同时得到面向对象的支持;
      ④性能高效或可调优。性能高效或至少可调优不存在瓶颈;
      ⑤事务剥离。以非数据为中心,需灵活的事务服务(单点事务)控制;
      ⑥站在局外的角度设计实现统一的持久层。(对于持久层的设计人员)对表结构及对象映射设计不可控性。对于持久层的设计人员,不具备对后台系统整体的规划设计,对表结构与对象映射设计不具备可控性,站在局外的角度设计实现统一的持久层。(后台WEB支持系统受此点要求限制)。

      ?后台WEB支撑系统持久层特点
       ①利用到后台系统库表,对这部分不具备控制权;
       ②大数据库量抽取较明显(各类报表)。

 

     ?结论:IBATIS合适的存活空间

(从“二--八”原则出发)以IBatis为核心(灵活控制、提供面向对象功能),以Spring容器为粘合剂(简化代码),以Spring JdbcTemplate为辅(性能提升-实时insert),作为后台系统(及其 WEB支撑系统&报表系统)持久层的基石。

0
1
分享到:
评论
3 楼 laijavatoo 2012-05-25  
JdbcTemplate 不全面 而且 ③动态SQL:IBatis支持动态SQL,JdbcTemplate不得不采用if...else硬编码模式满足此功能点;  这一点是错误的,他有自己的支持方式。
2 楼 arcpad 2012-03-02  
任何一个能够适应大数据量并发访问的系统,都对持久层的性能瓶颈提出苛刻的要求,如果仅从代码的优雅,为了OO而面向对象,那么技术是不是也有些迷失了她本来的目的。  当项目升级修改业务,势必会修改业务代码,当然也包括配置文件。问题是,哪一个改动的多。且改动量有多大?新人接受这项工作难度有多大?以上,大部分谈到的我都赞成,但还是支持JdbcTemplate,如果在Spring JdbcTemplate之上做适合业务的持久层封装。编码量不会很大,代码可读性强,性能就不用说了。。。以上。。。
1 楼 arcpad 2012-03-02  
说的不一定对,姑且听之

相关推荐

    ibatis简单CRUD例子

    在Ibatis中,CRUD(Create, Read, Update, Delete)是数据库中最基本的操作,下面我们将详细介绍如何使用Ibatis实现这些操作。 1. **创建(Create)**:创建通常涉及到插入新的记录。在Ibatis中,我们定义一个Insert...

    IBATIS_IN_ACTION

    《IBATIS_IN_ACTION》是一本深度探讨iBATIS框架应用与实践的专业书籍,由Clinton Begin、Brandon Goodin和Larry Meadors共同编写。本书详细介绍了iBATIS这一流行开源框架的核心概念、工作原理以及在实际项目中的应用...

    maven整合ibatis的简单例子

    在Java开发中,Maven和iBatis是两个非常重要的工具。Maven是一个项目管理和综合工具,它帮助开发者管理依赖、构建项目,并提供了一种标准化的项目结构。而iBatis则是一个SQL映射框架,它将SQL语句与Java代码分离,...

    ibatis api,ibatis文档,ibatis说明文档

    Ibatis文档是学习和解决问题的重要资源,它包含了详细的API参考、配置指南、最佳实践和常见问题解答。通过阅读文档,你可以了解如何配置Ibatis、创建Mapper接口和XML映射文件,以及如何处理复杂的查询和关联。 在...

    ibatis课件

    通过学习这些课件,你可以掌握如何将iBatis集成到你的项目中,如何编写动态SQL,以及如何处理复杂的数据库交互逻辑。 【标签】:“iBatis课件” 标签“iBatis课件”明确了这个压缩包的主要内容,意味着其中包含的...

    ibatis基础教学文档

    iBATIS 是一个Java开发中的持久化框架,由Clinton Begin创建,现由Apache基金会支持。它主要用于简化JDBC编程,提供一种“半自动化”的ORM(对象关系映射)实现,与Hibernate等“一站式”ORM解决方案相比,iBATIS...

    ibatis总结 ibatis ibatis ibatis ibatis

    本篇文章将深入探讨Ibatis的核心概念、最佳实践以及与其他框架如Struts和Spring的整合。 1. Ibatis SQL映射: Ibatis的主要特点是通过XML或注解定义SQL映射文件,将SQL语句与Java对象绑定。例如,`<select>`标签...

    最简单的iBatis入门例子

    这个"最简单的iBatis入门例子"将引领我们逐步理解并掌握iBatis的核心概念和基本用法。 首先,我们需要了解iBatis的基本架构。iBatis主要由三部分组成:配置文件(ibatis-config.xml)、映射文件(mapper.xml)和...

    ibatis2.X升级mybatis3.X之曲径通幽处

    此外,3.x版本还支持使用ExecutorType执行器类型,如SIMPLE、REUSE和BATCH,可以根据不同场景选择合适的执行策略,提高性能。 在日志方面,Mybatis3.x提供了更好的日志适配器,包括Log4j、Logback和Java内置的日志...

    ibatis 开发指南 和 iBATIS-SqlMaps两本图书

    《iBATIS 开发指南》和《iBATIS-SqlMaps》是两本关于Java开发领域中的...总之,深入学习这两本书,不仅能够帮助你理解iBATIS的工作原理,还能提升你在Java Web开发中的数据库管理技能,使你在项目开发中更加得心应手。

    ibatis资料ibatis资料

    1. **《iBATIS in Action》**: 这通常是一本关于iBATIS的书籍,可能深入介绍了iBATIS的原理、配置、使用方法以及最佳实践,对于学习和理解iBATIS非常有帮助。 2. **《ibatis Guide》**: 这可能是iBATIS的官方指南...

    IBatis.NET开发文档

    这个开发文档集合包含了"iBATIS SQL Maps 开发指南"、"iBATIS SQL Maps入门教程"以及"ibatis 开发指南"等资源,旨在帮助开发者深入理解和有效地使用iBATIS.NET。 iBATIS的核心理念是将SQL语句与应用程序代码分离,...

    ibatis demo,ibatis例子,ibatis示例

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将SQL语句与Java代码分离,从而更好地管理数据库操作。Ibatis的出现,解决了传统JDBC中手动编写SQL和结果集映射的繁琐工作,...

    关于Ibatis的jar包

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责简化数据库操作,使得开发者能够将注意力集中在SQL语句的编写上,而无需过多关注数据访问的底层细节。Ibatis通过XML或注解的方式配置和映射SQL,从而...

    ibatis2.3.4.rar

    在本资源"ibatis2.3.4.rar"中,包含了Ibatis 2.3.4版本的实例和相关的jar包,这将帮助你快速学习并熟练运用Ibatis。 Ibatis 的核心组件主要有以下几部分: 1. SQL 映射文件:这是Ibatis的核心,它定义了SQL语句、...

    ibatis2.0开发指南(官网)

    10. **最佳实践**:提供在实际项目中使用iBatis的最佳实践建议,帮助开发者避免常见问题,提升开发效率。 通过阅读《iBatis 2.0 开发指南》,开发者不仅可以掌握iBatis的基本用法,还能深入了解其设计思想,从而更...

    Ibatis 练习Demo和笔记

    通过运行这个项目,你可以更直观地了解Ibatis的工作流程。 总之,这个"Ibatis 练习Demo和笔记"资源为初学者提供了全面的学习路径,从理论到实践,逐步掌握Ibatis这一强大持久层框架的使用。通过深入研究并实践,...

    iBATIS 三个版对比

    ### iBATIS 三个版本对比分析 iBATIS是一款优秀的持久层框架,它极大地简化了SQL映射编程的复杂度。随着技术的发展,iBATIS经历了多个版本的迭代,包括iBATIS v1、v2以及最新的iBATIS v3。本文将详细对比这三个版本...

    ibatis

    标题 "iBatis" 涉及到的知识点主要集中在两个核心领域:iBatis框架本身和它与Spring框架的整合。以下是对这些知识点的详细解释: 1. iBatis框架: - iBatis是一个优秀的持久层框架,它允许程序员将SQL语句直接写在...

Global site tag (gtag.js) - Google Analytics