ibatis和mybatis的区别是什么?有什么不同?

KLQ 2020-07-13 14:15:40 java常见问答 5915

下面要给大家介绍的就是ibatis和mybatis的区别,那么对于这两者的区别你都了解吗?下面就让我们一起来看看究竟有哪些区别吧!

一、区别

1、判断语句

MyBatis非常的简单,在if的标签里面或者是where添加test=""即可。里面写判断条件了。

IBatis就比较的麻烦,将每一个方法都进行了封装。

例:

isNull:判断property字段是否是null

<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。

2、传入参数

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>

3、循环的使用

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>

4、接收参数

IBatis

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

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

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

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语句

6、MyBatis中一条sql结束后可以有“;”,而iBatis会报错。

以上就是ibatis和mybatis的区别了,你都了解了吗?

你想了解更多关于java架构师的内容吗?请继续关注奇Q工具网来了解吧!

推荐阅读:

jpa和mybatis的区别是什么?有哪些区别?

mysql数据库配置与数据源配置有何区别?数据源配置是什么样的?

mybatis分页插件(实现)