iBatis与Mybatis的区别对比

iBatis就是myBatis前身,他们只有有很多地方很相似,但是在sqlMap里面已经有很多地方变动了。下面就让我看好好地学习一下吧,同时对比一下他们的不同点。

但是这两种框架为什么这么多人使用呢?因为他方便使用啊,它最大的特性就是动态SQL语句,可以随意的拼接sql语句啊,简直不要太人性化。


事先声明,这篇文章现在只谈使用方法,不谈配置过程。

首先是sql。例如:
<sql id="sql_delete">  
    delete  
</sql>  
这个就相当定义了一个sql语句的片段,然后就可以方便的复用了啊,免得每次都要写重复的代码,麻烦,冗余。
有了定义,那么就一定要有调用了啊。
<include refid="sql_delete"/>  
这个就是调用的,可以方便的把他放到你的增删改查语句的任意位置。完美。
同理,myBatis也是这样的。

然后就是增删改查了,这个两个也是一致的。都是使用的insert delete update select标签。但是iBatis可以使用 statement,它是通用的。
但是里面关键字用到的就不一样了,比如:
iBatis的传入参数关键字是:parameterClass,而MyBatis是可以不写的,也可以用parameterType;
iBatis的传出参数关键字是:resultClass,而MyBatis是resultMap。
iBatis:    <select id="selectDeviceByWhere" parameterClass="Map"  resultClass="BaseResultMap">  </select>
MyBatis:<select id="selectDeviceByWhere" parameterType="Map"  resultMap="BaseResultMap">   </select>

接下来是接受参数:IBatis是使用#  #和$   $来接受参数的。使用方法等同于MyBatis;# #=#{  },$ $=${  }.

然后就是判断语句了,这个也是非常常用和重要的地方。
对于MyBatis的很简单,只要在where 或者if  的标签里面添加test=""就可以了,里面写判断条件了。
但是IBatis的就麻烦了许多了,它将每个都方法都进行了封装。
例如:
isNull:判断property字段是否是null        
<isNull prepend="and" property="id">   </isNull>
至于prepend就是代表着添加在动态语句前面。
property就是被比较的属性。

isNull:判断property字段是否不是null 

isEqual相当于equals,判断状态值。
<isEqual property="state" compareValue="0">  </isEqual>

<isEqual property="state" compareProperty="nextState">  </isEqual>

isEmpty判断参数是否为Null或者空,满足其中一个条件则其true。
isNotEmpty相反,当参数既不为Null也不为空是其为true。

这些就是非常常用的条件元素的属性了。

下面再来看看循环的:
Iterate:这属性遍历整个集合,并为 List 集合中的元素重复元素体的内容。

Iterate 的属性: 
prepend      - 可被覆盖的 SQL 语句组成部分,添加在语句的前面(可选) 
property      - 类型为 java.util.List 的用于遍历的元素(必选) 
open            - 整个遍历内容体开始的字符串,用于定义括号(可选) 
close            - 整个遍历内容体结束的字符串,用于定义括号(可选) 
conjunction - 每次遍历内容之间的字符串,用于定义 AND 或 OR(可选) 


<iterate> 遍历类型为 java.util.List的元素。


例子:
<iterate prepend="AND" property="userNameList" open="(" close=")" conjunction="OR">  
    username=#userNameList[]#  
</iterate>  


MyBatis使用的是ForEach方法。他可以遍历List,[](array),Map三种元素。


foreach属性:
item           -  循环体中的具体对象(必选) 
collection   -  要做foreach的对象(必选) 
open          -  整个遍历内容体开始的字符串,用于定义括号(可选) 
close          -  整个遍历内容体结束的字符串,用于定义括号(可选) 
separator   -  元素之间的分隔符(可选)
index          -  在list和数组中,index是元素的序号,在map中,index是元素的key(可选)
例子:
<foreach item="item" collection="list" separator="," open="(" close=")" index="">
      #{item.id}
</foreach>

最后的还有一个非常重要的标签没有介绍。dynamic
dynamic有一个非常重要的作用,那就是去除它的代码块中的第一个prepend里面的字符。
然后他也有自己的prepend标签,作用也是在语句前面添加修饰符,比如where。

而在MyBatis里是<where></where>.

好了,总结完毕,总结也是学习的自我梳理的一部分,所以如果那里不多,请各位大佬评论,我会尽快改正。



猜你喜欢

转载自blog.csdn.net/ljy950914/article/details/79852610
今日推荐