(一)Ibatis总结

来源:互联网 发布:自动回复聊天软件 编辑:程序博客网 时间:2024/06/03 21:34

ibatis一词的来源?

 

        IBATIS一词来源于"internet"和"abatis"组合,是一个由Clinton Begin在2002年发起的开放源代码项目。于2010年被谷歌脱管,改名为MyBatis。是一个基于SQL映射支持java和.NET的持久层框架。



        相对hibernate和ApacheOJB等“一站式”ORM解决方案,ibatis是一种“半自动化”ORM设计方案。目前ibatis提供了三种语言的版本,包括,java、.net以及Ruby。


与传统的JDBC比较?


        如果在持久层不用框架,直接用jdbc,需要我们编程人员做的工作较多,比如连接数据库,添加一条记录到数据库中的时候,对参数的处理,都需要自己来写语句,造成程序的结构不清晰,可读性差,不能用面向对象的思想来进行编写程序,这样对软件的维护带来一定的难度,所以我们在持久层使用框架。

        但是JDBC效率高,使用PreparedStatement对象可以实现预编译SQL。


使用ibatis好处?


        减少了代码量;

        最简单的持久化框架;

        架构级性增强;

        SQL代码从程序代码中彻底分离,可以重用;

        增强了项目中的分工;

        增强了可移植性;


与之前用过的Hibernate框架进行比较?


        如下图所示。

        hibernate映射关系,我们以Person表和Person对象的ORM映射为例。


        ibatis映射关系



从上面两幅图的对比中我们可以看出,


        1、ibatis与sql语句字段之间的映射


        我们在开发过程中,ibatis需要手动写sql语句,也可以生成一部分,hibernate则基本上可以自动生成,偶尔会写一些hql。同样的需求,ibatis工作量比hibernate要大很多。类似的,如果涉及到数据库字段的修改,hibernate修改的地方很少,而ibatis要把那些sql mapping的地方一一修改。


        2、ibatis可以进行细粒度的优化


比如在更新一个表的时候,这个表有几个或者几十个字段,我们需要更新这个表其中的一个字段,ibatis很简单,执行一个sql UPDATE TABLE_B SET column_1=#column_1# where id=#id# 但是用hibernate的话就比较麻烦了,缺省情况下hibernate会更新所有的字段。

使用ibatis的ORM机制,对业务逻辑实现人员来说,面对的是纯粹的java对象,这一点和hibernate的ORM是一致的,而对于具体的数据库操作,hibernate会自动生成sql语句,而ibatis则要求开发人员编写具体的sql语句。相对hibernate而言,ibatis以sql开发的工作量和数据库移植性上的让步,为系统提供了更大的自由空间。


        3、工作效率上

        三者的工作效率jdbc>ibatis>hibernate



ibatis工作流程?



 

         在ibatis中,我们也是用JavaBean,这样我们使用JavaBean就可以直接操作getter方法来获取内容。就像hibernate中的PO(persistent Object)一样。


        hibernate的使用:


                重点是session对象:

                session是持久化层操作的基础,相当于JDBC中的Connection;

                通过SessionFactory实例创建:Configuration config = new Configuration().config(); 

                SessionFactory sessionFactory = config.buildSessionFactory();

                Session session = sessionFactory.openSession();

                之后我们就可以调用Session所提供的save、find、flush等方法完成持久层操作。因此Session对象也封装了所有对数据库的操作来实现HIbernate对数据库的操纵功能,如:
                save()方法实现增加和保存;

                Delete()方法实现数据的删除;

                Update()方法实现数据更新和修改;

                Find()方法实现数据的检索;

                Hibernate会根据不同的操作自动生成相应的SQL语句,从而实现了程序员对PO对象的操作转换为对书库关系表的操作。



        ibatis的使用:


        重点是SqlMapClient对象,它是ibatis持久层操作的基础,相当于hibernate中的session,提供SQL映射的方法。

                insert()方法实现插入sql语句的映射;

                delete()方法实现删除sql语句的映射;‘

                updte()方法实现对更新sql语句的映射;

                queryForList()、queryForMap()、queryForObject()、queryForPaginatedList()等方法提供了一组查询sql语句的映射;


如何选择?


        hibernate和ibatis相比,较为重量级一些,hibernate功能强大,数据库无关性好,O/R映射能力强,为用户考虑的非常周全,不需要程序员动手,不懂sql语句的也可以编程,十分方便。而且从pojo(简单的javaBean)到数据库映射上面向对象。但是如果需要使用数据库的特定优化机制的时候,不适合使用hibernate,并且框架使用的ORM映射,如果上千张表的话,配置文件的内容时非常强大的,性能和维护问题随之而来。


        hibernate对批量处理时弱势,对于批量的修改,删除,不适合用hibernate,这也是ORM框架的弱点。


        ibatis入门简单,延续了很好sql使用经验,对于没有那么高的对象模型要求的项目来说,相当适合。所以如果项目中设计大量的数据,对sql的性能优化比较重视,我们可以选择ibatis。



 

0 0
原创粉丝点击