Mybatis学习笔记之一:Mybatis介绍

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)二级缓存机制不佳。


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值