Ibatis 和 Mybatis 的区别

  1. ibatis3.版本以后正式改名为mybaits,它也从apache转到了google code下;也就是说ibatis2.,mybatis3.。
  2. 映射文件的不同。

ibatis的配置文件如下:

<?xml version="1.0" encoding="UTF-8" ?>  

<!DOCTYPE sqlMapConfig        
    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"        
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">  

<sqlMapConfig>  
    <!-- 公共配置 -->  
    <settings useStatementNamespaces="true" maxRequests="3000"  
        maxSessions="1000" maxTransactions="3000" />  

    <!-- 配置文件        begin -->      
    <sqlMap resource="com/test/biz/dao/sql/AA_SqlMap.xml" />  
    <sqlMap resource="com/test/biz/dao/sql/BB_SqlMap.xml" />  
</sqlMapConfig>

mybatis的配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE configuration  
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
    "http://mybatis.org/dtd/mybatis-3-config.dtd">  
<configuration>  

    <settings>  
        <!-- changes from the defaults for testing -->  
        <setting name="cacheEnabled" value="false" />  
        <setting name="useGeneratedKeys" value="true" />  
        <setting name="defaultExecutorType" value="REUSE" />  
        <!-- 延迟加载 -->  
        <setting name="lazyLoadingEnabled" value="true" />  
        <setting name="aggressiveLazyLoading" value="false" />  
    </settings>  
    <mappers>  
        <mapper resource="com/test/biz/dao/sql/AAMapper.xml"/>  
    </mappers>  
</configuration> 

从以上两个配置文件,大致分析有哪些不同点:
2.1 dtd约束文件不同
2.2 ibatis中根元素是sqlMapConfig,mybatis中是configuration;
2.3 settings属性的不同配置

ibatis中是

<settings 属性1="属性值1" 属性2="属性值2"  属性x="属性值x"/>

mybatis中是

<settings>
<setting name="属性1" value="属性值1"/>
<setting name="属性2" value="属性值2"/>
<setting name="属性x" value="属性值x"/>
</settings>

2.4 ibatis中是使用sqlMap元素,mybatis中是使用mappers元素;
2.5 数据库表的映射区别
ibatis中某表的映射文件:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >  
<sqlMap namespace="PP_CLASS_PROPERTY">  
    <resultMap id="BaseResultMap" class="com.test.biz.dto.PpClassProperty">  
        <result column="ID" property="id" jdbcType="VARCHAR" />  
        <result column="CLASS_ID" property="classId" jdbcType="VARCHAR" />  
        <result column="PROPERTY_ID" property="propertyId" jdbcType="VARCHAR" />  
        <result column="INPUT_TYPE" property="inputType" jdbcType="VARCHAR" />  
        <result column="SORT_NUM" property="sortNum" jdbcType="DECIMAL" />  
        <result column="DESCRIPTION" property="description" jdbcType="VARCHAR" />  
        <result column="CREATED_DATE" property="createdDate" jdbcType="TIMESTAMP" />  
        <result column="CREATED_BY" property="createdBy" jdbcType="VARCHAR" />  
        <result column="UPDATED_DATE" property="updatedDate" jdbcType="TIMESTAMP" />  
        <result column="UPDATED_BY" property="updatedBy" jdbcType="VARCHAR" />  
        <result column="STATUS" property="status" jdbcType="DECIMAL" />  
        <result column="IS_KEY" property="isKey" jdbcType="DECIMAL" />  
        <result column="IS_SPU" property="isSpu" jdbcType="DECIMAL" />  
        <result column="IS_SALE" property="isSale" jdbcType="DECIMAL" />  
        <result column="IS_PRODUCT" property="isProduct" jdbcType="DECIMAL" />  
        <result column="CHANNEL_ID" property="channelId" jdbcType="VARCHAR" />  
        <result column="COMPANY_ID" property="companyId" jdbcType="VARCHAR" />  
    </resultMap>  

    <resultMap id="ResultMapWithClassName" class="com.test.biz.dto.PpClassProperty"  
        extends="PP_CLASS_PROPERTY.BaseResultMap">  
        <result property="propertyName" jdbcType="VARCHAR" />  
        <result property="className" jdbcType="VARCHAR" />  
    </resultMap>  

    <resultMap id="ResultMapWithClassNameForPage" class="com.test.biz.dto.PpClassProperty"  
        extends="PP_CLASS_PROPERTY.BaseResultMap">  
        <result property="propertyName" jdbcType="VARCHAR" />  
        <result property="className" jdbcType="VARCHAR" />  
        <result column="rnum" property="rnum" jdbcType="VARCHAR" />  
    </resultMap>  

    <sql id="Base_Column_List">  
        ID, CLASS_ID, PROPERTY_ID, INPUT_TYPE, SORT_NUM,  
        DESCRIPTION,  
        CREATED_DATE, CREATED_BY,  
        UPDATED_DATE, UPDATED_BY, STATUS,  
        IS_KEY, IS_SPU, IS_SALE, IS_PRODUCT,CHANNEL_ID,COMPANY_ID  
    </sql>  

    <sql id="p_Base_Column_List">  
        P.ID, P.CLASS_ID, P.PROPERTY_ID, P.INPUT_TYPE, P.SORT_NUM,  
        P.DESCRIPTION,  
        P.CREATED_DATE,  
        P.CREATED_BY, P.UPDATED_DATE,  
        P.UPDATED_BY, P.STATUS, P.IS_KEY, P.IS_SPU,  
        P.IS_SALE,  
        P.IS_PRODUCT,P.CHANNEL_ID,P.COMPANY_ID  
    </sql>  

    <!-- 0:未删除 1:已删除 -->  
    <select id="selectByPrimaryKey" resultMap="BaseResultMap"  
        parameterClass="com.test.biz.dto.PpClassProperty">  
        SELECT  
        <include refid="PP_CLASS_PROPERTY.Base_Column_List" />  
        FROM PP_CLASS_PROPERTY  
        WHERE ID = #id:VARCHAR# AND  
        <include refid="COMMON_JUDGEMENT_RULE.Judge_Status_ChannelId_CompanyId" />  
    </select>  

    <!-- 删除执行的是修改状态为1,表示已删除 -->  
    <update id="deleteByPrimaryKey" parameterClass="com.test.biz.dto.PpClassProperty">  
        UPDATE  
        PP_CLASS_PROPERTY  
        SET STATUS = 1  
        where ID = #id:VARCHAR# AND  
        <include refid="COMMON_JUDGEMENT_RULE.Judge_Status_ChannelId_CompanyId" />  
    </update>  

    <!-- 全字段 添加 -->  
    <insert id="insert" parameterClass="com.test.biz.dto.PpClassProperty">  
        INSERT INTO PP_CLASS_PROPERTY  
        (  
        <include refid="PP_CLASS_PROPERTY.Base_Column_List" />  
        )  
        VALUES (#id:VARCHAR#, #classId:VARCHAR#,  
        #propertyId:VARCHAR#,  
        #inputType:VARCHAR#,  
        #sortNum:DECIMAL#,  
        #description:VARCHAR#,  
        #createdDate:TIMESTAMP#,  
        #createdBy:VARCHAR#,  
        #updatedDate:TIMESTAMP#,  
        #updatedBy:VARCHAR#, 0,#isKey:DECIMAL#,  
        #isSpu:DECIMAL#,  
        #isSale:DECIMAL#, #isProduct:DECIMAL#,  
        #channelId:VARCHAR#,  
        #companyId:VARCHAR#)  
    </insert>  

    <!-- 动态修改 -->  
    <update id="updateByPrimaryKeySelective" parameterClass="com.test.biz.dto.PpClassProperty">  
        UPDATE PP_CLASS_PROPERTY  
        <dynamic prepend="set">  
            <isNotNull prepend="," property="classId">  
                CLASS_ID =  
                #classId:VARCHAR#  
            </isNotNull>  
            <isNotNull prepend="," property="propertyId">  
                PROPERTY_ID =  
                #propertyId:VARCHAR#  
            </isNotNull>  
            <isNotNull prepend="," property="inputType">  
                INPUT_TYPE =  
                #inputType:VARCHAR#  
            </isNotNull>  
            <isNotNull prepend="," property="sortNum">  
                SORT_NUM =  
                #sortNum:DECIMAL#  
            </isNotNull>  
            <isNotNull prepend="," property="description">  
                DESCRIPTION =  
                #description:VARCHAR#  
            </isNotNull>  
            <isNotNull prepend="," property="createdDate">  
                CREATED_DATE =  
                #createdDate:TIMESTAMP#  
            </isNotNull>  
            <isNotNull prepend="," property="createdBy">  
                CREATED_BY =  
                #createdBy:VARCHAR#  
            </isNotNull>  
            <isNotNull prepend="," property="updatedDate">  
                UPDATED_DATE =  
                #updatedDate:TIMESTAMP#  
            </isNotNull>  
            <isNotNull prepend="," property="updatedBy">  
                UPDATED_BY =  
                #updatedBy:VARCHAR#  
            </isNotNull>  
            <isNotNull prepend="," property="status">  
                STATUS = #status:DECIMAL#  
            </isNotNull>  
            <isNotNull prepend="," property="isKey">  
                IS_KEY = #isKey:DECIMAL#  
            </isNotNull>  
            <isNotNull prepend="," property="isSpu">  
                IS_SPU = #isSpu:DECIMAL#  
            </isNotNull>  
            <isNotNull prepend="," property="isSale">  
                IS_SALE = #isSale:DECIMAL#  
            </isNotNull>  
            <isNotNull prepend="," property="isProduct">  
                IS_PRODUCT =  
                #isProduct:DECIMAL#  
            </isNotNull>  
        </dynamic>  
        WHERE ID = #id:VARCHAR# AND  
        <include refid="COMMON_JUDGEMENT_RULE.Judge_Status_ChannelId_CompanyId" />  
    </update>  

    <!--查询类目已经关联的属性 0:未删除 1:已删除 -->  
    <select id="selectByClassId" resultMap="BaseResultMap"  
        parameterClass="com.test.biz.dto.PpClassProperty">  
        SELECT  
        <include refid="PP_CLASS_PROPERTY.Base_Column_List" />  
        FROM PP_CLASS_PROPERTY  
        WHERE CLASS_ID = #classId:VARCHAR# AND  
        <include refid="COMMON_JUDGEMENT_RULE.Judge_Status_ChannelId_CompanyId" />  
    </select>  

    <!-- 统计 查询类目已经关联的属性的数量 0:未删除 1:已删除 -->  
    <select id="countByClassId" resultClass="integer"  
        parameterClass="com.test.biz.dto.PpClassProperty">  
        SELECT  
        COUNT(ID)  
        FROM PP_CLASS_PROPERTY  
        WHERE CLASS_ID =  
        #classId:VARCHAR# AND  
        <include refid="COMMON_JUDGEMENT_RULE.Judge_Status_ChannelId_CompanyId" />  
    </select>  

    <!--根据类目id查询类目属性(包含类目名称和属性名称) 0:未删除 1:已删除 -->  
    <select id="selectWithClassNameByClassId" resultMap="ResultMapWithClassName"  
        parameterClass="map">  
        SELECT  
        <include refid="p_Base_Column_List" />  
        ,PP.PROPERTY_NAME PROPERTYNAME,PC.CLASS_NAME CLASSNAME  
        FROM  
        PP_CLASS_PROPERTY P,PP_PROPERTY PP,PP_CLASS PC  
        WHERE P.CLASS_ID =  
        #classId# AND P.CHANNEL_ID = #channelId# AND P.COMPANY_ID =  
        #companyId#  
        <isNotNull property="likeName">  
            AND PP.PROPERTY_NAME LIKE '%'||#likeName#||'%'  
        </isNotNull>  
        AND P.CLASS_ID = PC.ID AND P.PROPERTY_ID = PP.ID  
        AND P.CHANNEL_ID =  
        PC.CHANNEL_ID AND P.CHANNEL_ID = PP.CHANNEL_ID  
        AND P.COMPANY_ID =  
        PC.COMPANY_ID AND P.COMPANY_ID = PP.COMPANY_ID  
        AND P.STATUS=0 AND  
        PP.STATUS=0 AND PC.STATUS=0  
    </select>  


    <!--根据类目id查询类目属性(包含类目名称和属性名称) 查询总数 -->  
    <select id="countPageFindPpClassPropertyByClassId" resultClass="integer"  
        parameterClass="map">  
        SELECT  
        COUNT(1)  
        FROM  
        PP_CLASS_PROPERTY P,PP_PROPERTY PP,PP_CLASS PC  
        WHERE P.CLASS_ID =  
        #classId# AND P.CHANNEL_ID = #channelId# AND P.COMPANY_ID =  
        #companyId#  
        <isNotNull property="likeName">  
            AND PP.PROPERTY_NAME LIKE '%'||#likeName#||'%'  
        </isNotNull>  
        AND P.CLASS_ID = PC.ID AND P.PROPERTY_ID = PP.ID  
        AND P.CHANNEL_ID =  
        PC.CHANNEL_ID AND P.CHANNEL_ID = PP.CHANNEL_ID  
        AND P.COMPANY_ID =  
        PC.COMPANY_ID AND P.COMPANY_ID = PP.COMPANY_ID  
        AND P.STATUS=0 AND  
        PP.STATUS=0 AND PC.STATUS=0  
    </select>  

    <!-- 根据类目id查询该条记录时关键属性并且时type类型是input的值的信息 -->  
    <select id="findInputClassProperty" resultClass="java.util.HashMap"  
        parameterClass="com.test.biz.dto.PpClassProperty">  
        SELECT INPUT_TYPE AS "inputType" FROM PP_CLASS_PROPERTY  
        WHERE  
        CLASS_ID=#classId# AND IS_KEY=1   
        AND (INPUT_TYPE='input' OR INPUT_TYPE='textarea') AND  
        <include refid="COMMON_JUDGEMENT_RULE.Judge_Status_ChannelId_CompanyId" />  
    </select>  
</sqlMap>  

mybatis的数据库表映射文件:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >  

<mapper namespace="com.ilvyou.system.dao.SysUserMapper" >  
    <resultMap id="BaseResultMap" type="com.ilvyou.system.entity.SysUserEntity" >  
        <id property="id" column="ID" jdbcType="VARCHAR"/>  
        <result property="loginName" column="LOGIN_NAME" jdbcType="VARCHAR"/>  
        <result property="loginPass" column="LOGIN_PASS" jdbcType="VARCHAR"/>  
        <result property="userType" column="USER_TYPE" jdbcType="VARCHAR"/>  
        <result property="regDate" column="REG_DATE" jdbcType="CHAR"/>  
        <result property="email" column="EMAIL" jdbcType="VARCHAR"/>  
        <result property="mobile" column="MOBILE" jdbcType="VARCHAR"/>  
        <result property="qq" column="QQ" jdbcType="VARCHAR"/>  
        <result property="photo" column="PHOTO" jdbcType="VARCHAR"/>  
        <result property="cardType" column="CARD_TYPE" jdbcType="VARCHAR"/>  
        <result property="cardValue" column="CARD_VALUE" jdbcType="VARCHAR"/>  
        <result property="userName" column="USER_NAME" jdbcType="VARCHAR"/>  
        <result property="userSex" column="USER_SEX" jdbcType="VARCHAR"/>  
        <result property="userBir" column="USER_BIR" jdbcType="CHAR"/>  
        <result property="userAddr" column="USER_ADDR" jdbcType="VARCHAR"/>  
        <result property="jobName" column="JOB_NAME" jdbcType="VARCHAR"/>  
        <result property="jobAddr" column="JOB_ADDR" jdbcType="VARCHAR"/>  
        <result property="jobTel" column="JOB_TEL" jdbcType="VARCHAR"/>  
        <result property="bornAddr" column="BORN_ADDR" jdbcType="VARCHAR"/>  
        <result property="userStatus" column="USER_STATUS" jdbcType="INTEGER"/>  
        <result property="roleType" column="ROLE_TYPE" jdbcType="VARCHAR"/>  
    </resultMap>  

    <sql id="Base_Column_List">  
    ID          ,  
    LOGIN_NAME  ,  
    LOGIN_PASS  ,  
    USER_TYPE   ,  
    REG_DATE    ,  
    EMAIL       ,  
    MOBILE      ,  
    QQ          ,  
    PHOTO       ,  
    CARD_TYPE   ,  
    CARD_VALUE  ,  
    USER_NAME   ,  
    USER_SEX    ,  
    USER_BIR    ,  
    USER_ADDR   ,  
    JOB_NAME    ,  
    JOB_ADDR    ,  
    JOB_TEL     ,  
    BORN_ADDR   ,  
    USER_STATUS ,  
    ROLE_TYPE  
    </sql>  

    <sql id="select_by_page_outter_orderby_sql" >  
      <if test="orderByClause != null">    order by ${orderByClause}   </if>   
    </sql>  


    <!--select mothed-->  
    <select id="selectByPrimaryKey" parameterType="String" resultMap="SysUserEntityResultMap">  
    select   
    <include refid="Base_Column_List" />  
    from SYS_USER  
    where ID = #{id,jdbcType=VARCHAR}  
    </select>  

    <!--insert mothed-->  
    <insert id="insert" parameterType="com.ilvyou.system.entity.SysUserEntity">  
    insert into SYS_USER (  
        <include refid="Base_Column_List" />  
      )  
    values (  
    #{id,jdbcType=VARCHAR},  
    #{loginName,jdbcType=VARCHAR},  
    #{loginPass,jdbcType=VARCHAR},  
    #{userType,jdbcType=VARCHAR},  
    #{regDate,jdbcType=CHAR},  
    #{email,jdbcType=VARCHAR},  
    #{mobile,jdbcType=VARCHAR},  
    #{qq,jdbcType=VARCHAR},  
    #{photo,jdbcType=VARCHAR},  
    #{cardType,jdbcType=VARCHAR},  
    #{cardValue,jdbcType=VARCHAR},  
    #{userName,jdbcType=VARCHAR},  
    #{userSex,jdbcType=VARCHAR},  
    #{userBir,jdbcType=CHAR},  
    #{userAddr,jdbcType=VARCHAR},  
    #{jobName,jdbcType=VARCHAR},  
    #{jobAddr,jdbcType=VARCHAR},  
    #{jobTel,jdbcType=VARCHAR},  
    #{bornAddr,jdbcType=VARCHAR},  
    #{userStatus,jdbcType=INTEGER},  
    #{roleType,,jdbcType=VARCHAR}  
    )  
    </insert>  

    <insert id="batchInsert" >      
    insert into SYS_USER (<include refid="Base_Column_List" />)    
    values       
    <foreach collection="list" item="item" index="index" separator=",">  
    (  
    #{item.id,jdbcType=VARCHAR},  
    #{item.loginName,jdbcType=VARCHAR},  
    #{item.loginPass,jdbcType=VARCHAR},  
    #{item.userType,jdbcType=VARCHAR},  
    #{item.regDate,jdbcType=CHAR},  
    #{item.email,jdbcType=VARCHAR},  
    #{item.mobile,jdbcType=VARCHAR},  
    #{item.qq,jdbcType=VARCHAR},  
    #{item.photo,jdbcType=VARCHAR},  
    #{item.cardType,jdbcType=VARCHAR},  
    #{item.cardValue,jdbcType=VARCHAR},  
    #{item.userName,jdbcType=VARCHAR},  
    #{item.userSex,jdbcType=VARCHAR},  
    #{item.userBir,jdbcType=CHAR},  
    #{item.userAddr,jdbcType=VARCHAR},  
    #{item.jobName,jdbcType=VARCHAR},  
    #{item.jobAddr,jdbcType=VARCHAR},  
    #{item.jobTel,jdbcType=VARCHAR},  
    #{item.bornAddr,jdbcType=VARCHAR},  
    #{item.userStatus,jdbcType=INTEGER},  
    #{item.roleType,jdbcType=VARCHAR}  
    )  
    </foreach>  
    </insert>  


    <update id="updateByPrimaryKeySelective" parameterType="com.ilvyou.system.entity.SysUserEntity">  
    update SYS_USER  
    <set>  
      <if test="id != null">  
       ID = #{id,jdbcType=VARCHAR},  
      </if>  
      <if test="loginName != null">  
       LOGIN_NAME = #{loginName,jdbcType=VARCHAR},  
      </if>  
      <if test="loginPass != null">  
       LOGIN_PASS = #{loginPass,jdbcType=VARCHAR},  
      </if>  
      <if test="userType != null">  
       USER_TYPE = #{userType,jdbcType=VARCHAR},  
      </if>  
      <if test="regDate != null">  
       REG_DATE = #{regDate,jdbcType=CHAR},  
      </if>  
      <if test="email != null">  
       EMAIL = #{email,jdbcType=VARCHAR},  
      </if>  
      <if test="mobile != null">  
       MOBILE = #{mobile,jdbcType=VARCHAR},  
      </if>  
      <if test="qq != null">  
       QQ = #{qq,jdbcType=VARCHAR},  
      </if>  
      <if test="photo != null">  
       PHOTO = #{photo,jdbcType=VARCHAR},  
      </if>  
      <if test="cardType != null">  
       CARD_TYPE = #{cardType,jdbcType=VARCHAR},  
      </if>  
      <if test="cardValue != null">  
       CARD_VALUE = #{cardValue,jdbcType=VARCHAR},  
      </if>  
      <if test="userName != null">  
       USER_NAME = #{userName,jdbcType=VARCHAR},  
      </if>  
      <if test="userSex != null">  
       USER_SEX = #{userSex,jdbcType=VARCHAR},  
      </if>  
      <if test="userBir != null">  
       USER_BIR = #{userBir,jdbcType=CHAR},  
      </if>  
      <if test="userAddr != null">  
       USER_ADDR = #{userAddr,jdbcType=VARCHAR},  
      </if>  
      <if test="jobName != null">  
       JOB_NAME = #{jobName,jdbcType=VARCHAR},  
      </if>  
      <if test="jobAddr != null">  
       JOB_ADDR = #{jobAddr,jdbcType=VARCHAR},  
      </if>  
      <if test="jobTel != null">  
       JOB_TEL = #{jobTel,jdbcType=VARCHAR},  
      </if>  
      <if test="bornAddr != null">  
       BORN_ADDR = #{bornAddr,jdbcType=VARCHAR},  
      </if>  
      <if test="userStatus != null">  
       USER_STATUS = #{userStatus,jdbcType=INTEGER},  
      </if>  
      <if test="roleType != null">  
       ROLE_TYPE = #{roleType,jdbcType=VARCHAR},  
      </if>  
     </set>  
    where ID = #{id,jdbcType=VARCHAR}  
     </update>  


    <update id="batchUpdateByPrimaryKey" >      
    <foreach collection="list" item="item" index="index">          
    update SYS_USER set   
      LOGIN_NAME = #{item.loginName,jdbcType=VARCHAR},  
      LOGIN_PASS = #{item.loginPass,jdbcType=VARCHAR},  
      USER_TYPE = #{item.userType,jdbcType=VARCHAR},  
      REG_DATE = #{item.regDate,jdbcType=CHAR},  
      EMAIL = #{item.email,jdbcType=VARCHAR},  
      MOBILE = #{item.mobile,jdbcType=VARCHAR},  
      QQ = #{item.qq,jdbcType=VARCHAR},  
      PHOTO = #{item.photo,jdbcType=VARCHAR},  
      CARD_TYPE = #{item.cardType,jdbcType=VARCHAR},  
      CARD_VALUE = #{item.cardValue,jdbcType=VARCHAR},  
      USER_NAME = #{item.userName,jdbcType=VARCHAR},  
      USER_SEX = #{item.userSex,jdbcType=VARCHAR},  
      USER_BIR = #{item.userBir,jdbcType=CHAR},  
      USER_ADDR = #{item.userAddr,jdbcType=VARCHAR},  
      JOB_NAME = #{item.jobName,jdbcType=VARCHAR},  
      JOB_ADDR = #{item.jobAddr,jdbcType=VARCHAR},  
      JOB_TEL = #{item.jobTel,jdbcType=VARCHAR},  
      BORN_ADDR = #{item.bornAddr,jdbcType=VARCHAR},  
      USER_STATUS = #{item.userStatus,jdbcType=INTEGER},  
      ROLE_TYPE = #{item.roleType,jdbcType=VARCHAR}  
    where ID = #{item.id,jdbcType=VARCHAR}  
    </foreach>  
    </update>  



    <!--delete mothed-->  
    <delete id="deleteByPrimaryKey" parameterType="String">  
        delete from SYS_USER  
        where ID = #{id,jdbcType=VARCHAR}  
    </delete>  

    <delete id="batchDelete">  
        delete from SYS_USER   
        where ID in (  
        <foreach collection="list" item="item" index="index" separator=",">  
            #{item.id,jdbcType=VARCHAR}  
        </foreach>  
        )  
    </delete>  
</mapper>  

两者的区别有:
2.5.1 ibatis中根元素是sqlMap,mybatis中是mapper;

2.5.2 在 iBatis 中,namespace 不是必需的,且它的存在没有实际的意义。在 MyBatis 中,namespace 终于派上用场了,它使得映射文件与接口绑定变得非常自然。

2.5.3 ibatis中有resultMap和resultClass两种返回类型,resultMap是我们在ibatis的配置文件中定义的,也就是在配置文件中使用resultMap元素定义的;resultClass是指Java语言中内置的类型,如:integer、java.util.HashMap等等;

mybatis中将两者统一为resultType,这样挺好的,开发者不用再记两个属性了。

2.5.4 ibatis中有parameterClass,mybatis中有parameterType,两者区别不大。

2.5.5 参数的写法比较

ibatis中写法,如代码片段:
WHERE ID = #id:VARCHAR#  
mybatis中写法,如代码片段:
where ID = #{id,jdbcType=VARCHAR} 

2.5.6 iBatis/MyBatis 调用存储过程的写法

iBatis 调用存储过程的方法,通过使用 元素进行存储过程的调用:

<parameterMap id="swapParameters" class="map" >       

 <parameter property="contactId" jdbcType="INTEGER" javaType="java.lang.Integer" mode="IN"/>       

 <parameter property="firstName" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>         

 <parameter property="lastName" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>       

</parameterMap>          
<procedure id="swapContactName" parameterMap="swapParameters" >       

{call swap_contact_name (?, ?,?)}        

</procedure>   

在 MyBatis 中,<proccedure> 元素已经被移除,通过 <select>、<insert> 和 <update> 进行定义:

<select id="swapContactName" parameterMap="swapParameters" statementType="CALLABLE">    
  { ? = call swap_contact_name (?,?,?)}     
</select>  

如上所示,通过 statementType 属性将该语句标识为存储过程而非普通 SQL 语句。

2.6 ibatis和mybatis与spring的集成配置

ibatis的配置

<!--===================================================================== -->  
<!-- iBATIS 配置文件定义 -->  
<!--===================================================================== -->  
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">  
    <property name="configLocation" value="classpath:sqlMap-config.xml" />  
    <property name="dataSource" ref="dataSource" />  
</bean>  

mybatis的配置

<!-- define the MyBatis SqlSessionFactory -->  
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
    <property name="dataSource" ref="dataSource" />  
    <property name="configLocation" value="classpath:com/ilvyou/core/config/mybatis-config.xml" />  
    <property name="mapperLocations" value="classpath*:com/ilvyou/**/*Mapper.xml" />  
</bean>  

通过前面的示例可以看出,MyBatis 在编码中的最大的改变就是将一个最常用的 API 由 SqlMapClient 改为了 SqlSessionFactory。另外,类型处理器接口也由原来的 TypeHandlerCallback 改为了 TypeHandler。最后 DataSourceFactory 也进行了调整,移动到 org.apache.ibatis.datasource 包下,其中的方法也作了微调。总之,代码层面公开的部分改动较少,不会给开发者造成较大的移植成本。

阅读原文

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值