ibatis框架是mybatis吗?有什么区别?

TheDisguiser 2020-07-24 18:11:00 java常见问答 5103

其实到现在,还有不少萌新mybatis、ibatis傻傻分不清楚,以为它们是一样东西,这次咱们就来看看它们到底有什么区别。

首先我们要了解到,ibatis并不是mybatis,更准确的说,它是mybatis的前身,mybatis是进化版,它们的区别如下:

判断语句区别

MyBatis是判断语句十分简单,只需在if标签里或是where下添加test=""。

但IBatis十分麻烦,它要把每一个方法都进行封装才行。

例:

<isNull prepend="and" property="id"></isNull>
isEqual相当于equals, 判断状态值。
    <
    isEqual property = "state"
compareValue = "0" > </isEqual>
` 或
<isEqual property="state" compareProperty="nextState"></isEqual>
isEmpty判断参数是否为Null或者空,满足其中一个条件则其true。
isNotEmpty相反,当参数既不为Null也不为空是其为true。

参数间区别

iBatis:parameterClass

MyBatis可以不写,也可以使用parameterType;parameterClass

传出参数关键字

iBatis:resultClass

MyBatis:resultMap

iBatis:

<select id="selectDeviceByWhere" parameterClass="Map" resultClass="BaseResultMap"></select>

MyBatis:

<select id="selectDeviceByWhere" parameterType="Map" resultMap="BaseResultMap"></select>

循环区别

iBatis:Iterate

这个属性会遍历整个集合,并为java.util.List集合中的元素重复元素体的内容

例:

<isNotEmpty property="deptIds">
and dept_id in 
    <iterate property="deptIds" open="(" close=")" conjunction=",">
#deptIds[]#
        </iterate>
</isNotEmpty>

deptIds是数组类型的属性值,在deptIds不为null或者是“”的时候,进行deptIds遍历取值。

MyBatis:ForEach

它可以遍历List,,Map三种元素。

循环插入:

<insert id="xxxx" parameterType="CompilingRateDto">
        insert into cm_compiling_rate (area)
        values 
        
    <foreach collection="compilingRateList" item="compilingRate"  separator="," >
        (#{compilingRate.area})
         </foreach>
</insert>

循环更新:

<update id="xxxxx" parameterType="CompilingRateDto">
    <foreach collection="updateCompilingRateList" item="compiling"  separator=";" >
        update cm_compiling_rate cr
      set  compiling_manpower = #{compiling.compilingManpower},
     where cr.valid_Month=#{compiling.validMonth}       
      </foreach>
</update>

接收参数的区别

IBatis

使用# #和$ KaTeX parse error: Expected 'EOF', got '#' at position 23: …使用方法等同于MyBatis;#̲ #=#{ }, = =={ }

#和KaTeX parse error: Expected 'EOF', got '#' at position 5: 的区别

#̲字符串处理,加单引号,可以一定…直接使用,在传入的是数字的时候,用#会进行隐式转换为字符串,耗性能。

存储过程区别

iBatis

<procedure id="setCaseQueueStatus.sql" parameterMap="params.caseQueueStatus">
    <![CDATA[
    {call CMPCCDATA.PKG_CMPCC_QUEUE_TEASE.PROC_SET_AST_ACCT_STATUS(?,?)}
     ]]>
</procedure> <
parameterMap id = "params.caseQueueStatus"
class = "java.util.Map" >
    <parameter property="P_ACCT_SN" jdbcType="VARCHAR" javaType="string" mode="IN" /> <
    parameter property = "P_QUEUE_STATUS"
jdbcType = "VARCHAR"
javaType = "string"
mode = "IN" / >
    </parameterMap>

MyBatis

<select id="xxxxx"  resultType = "java.lang.String" statementType="CALLABLE">
   {call batch_randomMark()}
</select>

通过statementType属性将这个语句标识为存储过程而非普通SQL语句

以上就是关于mybatis与ibatis区别的所有内容,更多java架构师相关内容敬请关注奇Q工具网了解详情。

推荐阅读:

mybatis相对于ibatis的优势是什么?

ibatis调用存储过程如何实现?

ibatis分页如何实现?代码实例