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