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。