正文
MyBatis 与Ibatis 区别
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
Ibatis 是 Mybatis 的前身,两者都是优秀的持久层框架。
区别:
1、mybatis 实现接口绑定,不需要具体接口实现类。但是需要在xml文件中 的 namespace 绑定具体的接口。
这个实现原理是JDK的动态代理,原理会在下一篇博客更新。
@Component
public interface XXXDAO extends BaseDAO<XXXDO, Long> {
}
<mapper namespace="com.xxx.dao.XXXDAO" >
</mapper>
ibatis 需要定义具体接口的实现,并且在接口实现中获取SqlMapClient以及绑定xml文件。
<sqlMap namespace="namespace名称" >
</sqlMap>
public class XXXDAOImpl extends SqlMapClientDaoSupport implements XXXDAO { @Override
public Long insert(XXX xxx) throws DataAccessException {
Object id = getSqlMapClientTemplate().insert("namespace名称.语句id", xxx);
return (Long) id;
}
2、XML文件不同
1)mybatis用的是<mappers> 标签,ibatis 是用 <sqlMap> 标签
2)mybatis 支持 ognl 表达式,ibatis不支持
3)mybatis 接收参数的方式 #{id} ${id}$ ,ibatis 是 #id# $id$
ps: #与$ 的区别是# 是作为参数传递,预编译使用
$ 是作为sql 一部分拼接,会有sql注入的风险
4)mybatis 参数类型是 parameterType,ibatis 参数类型是parameterClass
5)动态语句写法不同
mybatis
<update id="updateByPrimaryKeySelective" parameterType="xxxDO" >
update xxx
<set >
<if test="activityWarmupSwitch != null" >
activity_warmup_switch = #{activityWarmupSwitch,jdbcType=CHAR},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
</update>
ibatis
<update id="updateCommentById" parameterClass="xxxDO" >
UPDATE xxx
<dynamic prepend="SET" >
<isNotNull property="fuId" prepend="," >
<![CDATA[
fu_id = #fuId#
]]>
</isNotNull>
</dynamic>
WHERE id = #id#
</update>
6)mybatis 迭代用的是 foreach ,ibatis用的是iterator