其实到现在,还有不少萌新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工具网了解详情。
推荐阅读: