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

 

 

 

posted @ 2019-07-07 15:43  加油鸭Starry  阅读(1500)  评论(0编辑  收藏  举报