Mybatis学习笔记之一:Mybatis介绍

来源:互联网 发布:python 运行环境 编辑:程序博客网 时间:2024/06/05 08:56

1、Mybatis的由来

Mybatis前身为Ibatis。ibatis是Internet与abatis的组合,它是由Clinton Begin在2002年发起的一个开源项目,在2010年6月被谷歌托管,更名为Mybatis。

版本更替:ibatis1.x --> ibatis2.x -->mybatis3.x。

2、Mybatis用来做什么?

Mybatis是一个半自动化的基于SQL的ORM(Object-Relation Mapping)持久层框架,支持java和.NET以及Rubby。它在封装了JDBC的基础上与关系型数据库进行交互,可以节省开发时间,节约成本等。它是基于SQL语言的,而SQL语言包含两种语言,DDL和DML。DDL(Data Definetion Language)数据定义语言,其中包括CREATE、DROP以及ALTER这样的语句,这些语句用来定义数据库及其设计。Ibatis并不直接支持DDL,虽然有人通过Ibatis执行了DDL,但并不推荐这么做。SQL包含的第二种语言DML(Data Manipulation Language)数据操纵语言。包括像INSERT、SELECT、UPDATE、DELETE这样直接操纵数据的语句。

3、Mybatis的优势

 1)SQL语句与代码分离。使用JDBC操纵数据,会将SQL语句嵌入代码中,且SQL语句换行或过长时有可能出错。但Mybatis代码与SQL语句分离开来。

 2)对SQL语句的封装,Mybatis使用XML语言来封装SQL,映射SQL的输入输出。大多数SQL都有1个或多个参数,会产生一堆表格化的数据作为结果。Mybatis允许你将输入输出参数映射为某些对象的特性(property)。如下所示:
<select id="load" parameterType="int" resultType="User">select * from t_user where id=#{id}</select>
 3) 动态SQL拼接。在开发过程中,对多条件的查询语句需要在大量条件判断拼接SQL。但mybatis提供了若干特性以支持参数的动态构建查询,如下所示:
<select id="find" resultType="User" parameterType="map" >select * from t_user<where><if test="name!=null"> username like #{name} or nickname like #{name}</if><if test="password!=null">and password=#{password}</if></where><choose><when test="order!=null"> order by ${order}<if test="sort!=null"> ${sort}</if></when></choose></select>

4、Mybatis与Hibernate对比

 1)Mybatis是半自动化,而Hibernate是自动化。使用Mybatis,代码中用到的所有SQL语句都必须由开发人员编写,而Hibernate可以自动生成SQL语句并执行。相比Hibernate,Mybatis开发工作量大,但Mybatis更加轻量级,所需依赖比Hibernate少的多。

 2)移植性。Mybatis使用SQL语句直接与数据库进行交互,所以SQL语句是依赖数据库书写的,而Hibernate的HQL语言不关心具体使用什么数据库(可以在配置中配置数据库方言,是MySQL还是Oracle)。所以相比Hibernate,Mybatis移植性较差。

3)性能问题。如第二点,Mybatis直接使用SQL语句,而Hibernate的HQL语言需要转化为SQL语言才能执行,速度相比Mybatis要慢,且如果使用Hibernate时存在对象关联,Hibernate会慢得多。但Hibernate也可以直接使用SQL语句。

4)缓存。Hibernate提供良好的缓存机制,也可以使用第三方缓存。而Mybatis本身提供的缓存机制不佳。

总结来说:Mybatis 小巧、轻便、高效、简单、直接、半自动化

                    Hibernate 强大、方便、高效、复杂、间接(直接)、自动化

5、Mybatis的缺点

 1)编写SQL工作量大,尤其是字段多、关联表多时。

 2)虽说SQL代码与程序代码解耦,SQL放在了配置文件中,方便了修改浏览等,但可读性低,调试困难。

 3)编写SQL语句依赖于数据库,不便移植。

 4)二级缓存机制不佳。