MyBatis 與Ibatis 區別

Ibatis 是 Mybatis 的前身,二者都是優秀的持久層框架。sql

區別:mybatis

一、mybatis 實現接口綁定,不須要具體接口實現類。可是須要在xml文件中 的 namespace 綁定具體的接口。app

這個實現原理是JDK的動態代理,原理會在下一篇博客更新。框架

@Component
public interface XXXDAO extends BaseDAO<XXXDO, Long> {
}
<mapper namespace="com.xxx.dao.XXXDAO" >
</mapper>

ibatis 須要定義具體接口的實現,而且在接口實現中獲取SqlMapClient以及綁定xml文件。ide

<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;
    }

二、XML文件不一樣spa

1)mybatis用的是<mappers> 標籤,ibatis 是用 <sqlMap> 標籤代理

2)mybatis 支持 ognl 表達式,ibatis不支持code

3)mybatis 接收參數的方式 #{id} ${id}$ ,ibatis 是 #id# $id$  xml

ps: #與$ 的區別是# 是做爲參數傳遞,預編譯使用blog

$ 是做爲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

相關文章
相關標籤/搜索