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