分享

ibatis和mybatis的区别

 观审美2 2017-03-07

1. ibatis3.*版本以后正式改名为mybaits,它也从apache转到了google code下;也就是说ibatis2.*,mybatis3.*。

2. 映射文件的不同


ibatis的配置文件如下

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2.   
  3. <!DOCTYPE sqlMapConfig        
  4.     PUBLIC "-//ibatis.//DTD SQL Map Config 2.0//EN"        
  5.     "http://ibatis./dtd/sql-map-config-2.dtd">  
  6.   
  7. <sqlMapConfig>  
  8.     <!-- 公共配置 -->  
  9.     <settings useStatementNamespaces="true" maxRequests="3000"  
  10.         maxSessions="1000" maxTransactions="3000" />  
  11.           
  12.     <!-- 配置文件        begin -->      
  13.     <sqlMap resource="com/test/biz/dao/sql/AA_SqlMap.xml" />  
  1. <pre name="code" class="html">    <sqlMap resource="com/test/biz/dao/sql/BB_SqlMap.xml" />  
</sqlMapConfig>



mybatis的配置文件如下

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE configuration  
  3.     PUBLIC "-////DTD Config 3.0//EN"  
  4.     "http:///dtd/mybatis-3-config.dtd">  
  5. <configuration>  
  6.   
  7.     <settings>  
  8.         <!-- changes from the defaults for testing -->  
  9.         <setting name="cacheEnabled" value="false" />  
  10.         <setting name="useGeneratedKeys" value="true" />  
  11.         <setting name="defaultExecutorType" value="REUSE" />  
  12.         <!-- 延迟加载 -->  
  13.         <setting name="lazyLoadingEnabled" value="true" />  
  14.         <setting name="aggressiveLazyLoading" value="false" />  
  15.     </settings>  
  16.     <mappers>  
  17.         <mapper resource="com/test/biz/dao/sql/AAMapper.xml"/>  
  18.     </mappers>  
  19. </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中某表的映射文件

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE sqlMap PUBLIC "-//ibatis.//DTD SQL Map 2.0//EN" "http://ibatis./dtd/sql-map-2.dtd" >  
  3. <sqlMap namespace="PP_CLASS_PROPERTY">  
  4.     <resultMap id="BaseResultMap" class="com.test.biz.dto.PpClassProperty">  
  5.         <result column="ID" property="id" jdbcType="VARCHAR" />  
  6.         <result column="CLASS_ID" property="classId" jdbcType="VARCHAR" />  
  7.         <result column="PROPERTY_ID" property="propertyId" jdbcType="VARCHAR" />  
  8.         <result column="INPUT_TYPE" property="inputType" jdbcType="VARCHAR" />  
  9.         <result column="SORT_NUM" property="sortNum" jdbcType="DECIMAL" />  
  10.         <result column="DESCRIPTION" property="description" jdbcType="VARCHAR" />  
  11.         <result column="CREATED_DATE" property="createdDate" jdbcType="TIMESTAMP" />  
  12.         <result column="CREATED_BY" property="createdBy" jdbcType="VARCHAR" />  
  13.         <result column="UPDATED_DATE" property="updatedDate" jdbcType="TIMESTAMP" />  
  14.         <result column="UPDATED_BY" property="updatedBy" jdbcType="VARCHAR" />  
  15.         <result column="STATUS" property="status" jdbcType="DECIMAL" />  
  16.         <result column="IS_KEY" property="isKey" jdbcType="DECIMAL" />  
  17.         <result column="IS_SPU" property="isSpu" jdbcType="DECIMAL" />  
  18.         <result column="IS_SALE" property="isSale" jdbcType="DECIMAL" />  
  19.         <result column="IS_PRODUCT" property="isProduct" jdbcType="DECIMAL" />  
  20.         <result column="CHANNEL_ID" property="channelId" jdbcType="VARCHAR" />  
  21.         <result column="COMPANY_ID" property="companyId" jdbcType="VARCHAR" />  
  22.     </resultMap>  
  23.   
  24.     <resultMap id="ResultMapWithClassName" class="com.test.biz.dto.PpClassProperty"  
  25.         extends="PP_CLASS_PROPERTY.BaseResultMap">  
  26.         <result property="propertyName" jdbcType="VARCHAR" />  
  27.         <result property="className" jdbcType="VARCHAR" />  
  28.     </resultMap>  
  29.   
  30.     <resultMap id="ResultMapWithClassNameForPage" class="com.test.biz.dto.PpClassProperty"  
  31.         extends="PP_CLASS_PROPERTY.BaseResultMap">  
  32.         <result property="propertyName" jdbcType="VARCHAR" />  
  33.         <result property="className" jdbcType="VARCHAR" />  
  34.         <result column="rnum" property="rnum" jdbcType="VARCHAR" />  
  35.     </resultMap>  
  36.   
  37.     <sql id="Base_Column_List">  
  38.         ID, CLASS_ID, PROPERTY_ID, INPUT_TYPE, SORT_NUM,  
  39.         DESCRIPTION,  
  40.         CREATED_DATE, CREATED_BY,  
  41.         UPDATED_DATE, UPDATED_BY, STATUS,  
  42.         IS_KEY, IS_SPU, IS_SALE, IS_PRODUCT,CHANNEL_ID,COMPANY_ID  
  43.     </sql>  
  44.   
  45.     <sql id="p_Base_Column_List">  
  46.         P.ID, P.CLASS_ID, P.PROPERTY_ID, P.INPUT_TYPE, P.SORT_NUM,  
  47.         P.DESCRIPTION,  
  48.         P.CREATED_DATE,  
  49.         P.CREATED_BY, P.UPDATED_DATE,  
  50.         P.UPDATED_BY, P.STATUS, P.IS_KEY, P.IS_SPU,  
  51.         P.IS_SALE,  
  52.         P.IS_PRODUCT,P.CHANNEL_ID,P.COMPANY_ID  
  53.     </sql>  
  54.   
  55.     <!-- 0:未删除 1:已删除 -->  
  56.     <select id="selectByPrimaryKey" resultMap="BaseResultMap"  
  57.         parameterClass="com.test.biz.dto.PpClassProperty">  
  58.         SELECT  
  59.         <include refid="PP_CLASS_PROPERTY.Base_Column_List" />  
  60.         FROM PP_CLASS_PROPERTY  
  61.         WHERE ID = #id:VARCHAR# AND  
  62.         <include refid="COMMON_JUDGEMENT_RULE.Judge_Status_ChannelId_CompanyId" />  
  63.     </select>  
  64.   
  65.     <!-- 删除执行的是修改状态为1,表示已删除 -->  
  66.     <update id="deleteByPrimaryKey" parameterClass="com.test.biz.dto.PpClassProperty">  
  67.         UPDATE  
  68.         PP_CLASS_PROPERTY  
  69.         SET STATUS = 1  
  70.         where ID = #id:VARCHAR# AND  
  71.         <include refid="COMMON_JUDGEMENT_RULE.Judge_Status_ChannelId_CompanyId" />  
  72.     </update>  
  73.   
  74.     <!-- 全字段 添加 -->  
  75.     <insert id="insert" parameterClass="com.test.biz.dto.PpClassProperty">  
  76.         INSERT INTO PP_CLASS_PROPERTY  
  77.         (  
  78.         <include refid="PP_CLASS_PROPERTY.Base_Column_List" />  
  79.         )  
  80.         VALUES (#id:VARCHAR#, #classId:VARCHAR#,  
  81.         #propertyId:VARCHAR#,  
  82.         #inputType:VARCHAR#,  
  83.         #sortNum:DECIMAL#,  
  84.         #description:VARCHAR#,  
  85.         #createdDate:TIMESTAMP#,  
  86.         #createdBy:VARCHAR#,  
  87.         #updatedDate:TIMESTAMP#,  
  88.         #updatedBy:VARCHAR#, 0,#isKey:DECIMAL#,  
  89.         #isSpu:DECIMAL#,  
  90.         #isSale:DECIMAL#, #isProduct:DECIMAL#,  
  91.         #channelId:VARCHAR#,  
  92.         #companyId:VARCHAR#)  
  93.     </insert>  
  94.   
  95.     <!-- 动态修改 -->  
  96.     <update id="updateByPrimaryKeySelective" parameterClass="com.test.biz.dto.PpClassProperty">  
  97.         UPDATE PP_CLASS_PROPERTY  
  98.         <dynamic prepend="set">  
  99.             <isNotNull prepend="," property="classId">  
  100.                 CLASS_ID =  
  101.                 #classId:VARCHAR#  
  102.             </isNotNull>  
  103.             <isNotNull prepend="," property="propertyId">  
  104.                 PROPERTY_ID =  
  105.                 #propertyId:VARCHAR#  
  106.             </isNotNull>  
  107.             <isNotNull prepend="," property="inputType">  
  108.                 INPUT_TYPE =  
  109.                 #inputType:VARCHAR#  
  110.             </isNotNull>  
  111.             <isNotNull prepend="," property="sortNum">  
  112.                 SORT_NUM =  
  113.                 #sortNum:DECIMAL#  
  114.             </isNotNull>  
  115.             <isNotNull prepend="," property="description">  
  116.                 DESCRIPTION =  
  117.                 #description:VARCHAR#  
  118.             </isNotNull>  
  119.             <isNotNull prepend="," property="createdDate">  
  120.                 CREATED_DATE =  
  121.                 #createdDate:TIMESTAMP#  
  122.             </isNotNull>  
  123.             <isNotNull prepend="," property="createdBy">  
  124.                 CREATED_BY =  
  125.                 #createdBy:VARCHAR#  
  126.             </isNotNull>  
  127.             <isNotNull prepend="," property="updatedDate">  
  128.                 UPDATED_DATE =  
  129.                 #updatedDate:TIMESTAMP#  
  130.             </isNotNull>  
  131.             <isNotNull prepend="," property="updatedBy">  
  132.                 UPDATED_BY =  
  133.                 #updatedBy:VARCHAR#  
  134.             </isNotNull>  
  135.             <isNotNull prepend="," property="status">  
  136.                 STATUS = #status:DECIMAL#  
  137.             </isNotNull>  
  138.             <isNotNull prepend="," property="isKey">  
  139.                 IS_KEY = #isKey:DECIMAL#  
  140.             </isNotNull>  
  141.             <isNotNull prepend="," property="isSpu">  
  142.                 IS_SPU = #isSpu:DECIMAL#  
  143.             </isNotNull>  
  144.             <isNotNull prepend="," property="isSale">  
  145.                 IS_SALE = #isSale:DECIMAL#  
  146.             </isNotNull>  
  147.             <isNotNull prepend="," property="isProduct">  
  148.                 IS_PRODUCT =  
  149.                 #isProduct:DECIMAL#  
  150.             </isNotNull>  
  151.         </dynamic>  
  152.         WHERE ID = #id:VARCHAR# AND  
  153.         <include refid="COMMON_JUDGEMENT_RULE.Judge_Status_ChannelId_CompanyId" />  
  154.     </update>  
  155.   
  156.     <!--查询类目已经关联的属性 0:未删除 1:已删除 -->  
  157.     <select id="selectByClassId" resultMap="BaseResultMap"  
  158.         parameterClass="com.test.biz.dto.PpClassProperty">  
  159.         SELECT  
  160.         <include refid="PP_CLASS_PROPERTY.Base_Column_List" />  
  161.         FROM PP_CLASS_PROPERTY  
  162.         WHERE CLASS_ID = #classId:VARCHAR# AND  
  163.         <include refid="COMMON_JUDGEMENT_RULE.Judge_Status_ChannelId_CompanyId" />  
  164.     </select>  
  165.   
  166.     <!-- 统计 查询类目已经关联的属性的数量 0:未删除 1:已删除 -->  
  167.     <select id="countByClassId" resultClass="integer"  
  168.         parameterClass="com.test.biz.dto.PpClassProperty">  
  169.         SELECT  
  170.         COUNT(ID)  
  171.         FROM PP_CLASS_PROPERTY  
  172.         WHERE CLASS_ID =  
  173.         #classId:VARCHAR# AND  
  174.         <include refid="COMMON_JUDGEMENT_RULE.Judge_Status_ChannelId_CompanyId" />  
  175.     </select>  
  176.   
  177.     <!--根据类目id查询类目属性(包含类目名称和属性名称) 0:未删除 1:已删除 -->  
  178.     <select id="selectWithClassNameByClassId" resultMap="ResultMapWithClassName"  
  179.         parameterClass="map">  
  180.         SELECT  
  181.         <include refid="p_Base_Column_List" />  
  182.         ,PP.PROPERTY_NAME PROPERTYNAME,PC.CLASS_NAME CLASSNAME  
  183.         FROM  
  184.         PP_CLASS_PROPERTY P,PP_PROPERTY PP,PP_CLASS PC  
  185.         WHERE P.CLASS_ID =  
  186.         #classId# AND P.CHANNEL_ID = #channelId# AND P.COMPANY_ID =  
  187.         #companyId#  
  188.         <isNotNull property="likeName">  
  189.             AND PP.PROPERTY_NAME LIKE '%'||#likeName#||'%'  
  190.         </isNotNull>  
  191.         AND P.CLASS_ID = PC.ID AND P.PROPERTY_ID = PP.ID  
  192.         AND P.CHANNEL_ID =  
  193.         PC.CHANNEL_ID AND P.CHANNEL_ID = PP.CHANNEL_ID  
  194.         AND P.COMPANY_ID =  
  195.         PC.COMPANY_ID AND P.COMPANY_ID = PP.COMPANY_ID  
  196.         AND P.STATUS=0 AND  
  197.         PP.STATUS=0 AND PC.STATUS=0  
  198.     </select>  
  199.   
  200.   
  201.     <!--根据类目id查询类目属性(包含类目名称和属性名称) 查询总数 -->  
  202.     <select id="countPageFindPpClassPropertyByClassId" resultClass="integer"  
  203.         parameterClass="map">  
  204.         SELECT  
  205.         COUNT(1)  
  206.         FROM  
  207.         PP_CLASS_PROPERTY P,PP_PROPERTY PP,PP_CLASS PC  
  208.         WHERE P.CLASS_ID =  
  209.         #classId# AND P.CHANNEL_ID = #channelId# AND P.COMPANY_ID =  
  210.         #companyId#  
  211.         <isNotNull property="likeName">  
  212.             AND PP.PROPERTY_NAME LIKE '%'||#likeName#||'%'  
  213.         </isNotNull>  
  214.         AND P.CLASS_ID = PC.ID AND P.PROPERTY_ID = PP.ID  
  215.         AND P.CHANNEL_ID =  
  216.         PC.CHANNEL_ID AND P.CHANNEL_ID = PP.CHANNEL_ID  
  217.         AND P.COMPANY_ID =  
  218.         PC.COMPANY_ID AND P.COMPANY_ID = PP.COMPANY_ID  
  219.         AND P.STATUS=0 AND  
  220.         PP.STATUS=0 AND PC.STATUS=0  
  221.     </select>  
  222.   
  223.     <!-- 根据类目id查询该条记录时关键属性并且时type类型是input的值的信息 -->  
  224.     <select id="findInputClassProperty" resultClass="java.util.HashMap"  
  225.         parameterClass="com.test.biz.dto.PpClassProperty">  
  226.         SELECT INPUT_TYPE AS "inputType" FROM PP_CLASS_PROPERTY  
  227.         WHERE  
  228.         CLASS_ID=#classId# AND IS_KEY=1   
  229.         AND (INPUT_TYPE='input' OR INPUT_TYPE='textarea') AND  
  230.         <include refid="COMMON_JUDGEMENT_RULE.Judge_Status_ChannelId_CompanyId" />  
  231.     </select>  
  232.   
  233.   
  234. </sqlMap>  

mybatis的数据库表映射文件

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN" "http:///dtd/mybatis-3-mapper.dtd" >  
  3.   
  4. <mapper namespace="com.ilvyou.system.dao.SysUserMapper" >  
  5.     <resultMap id="BaseResultMap" type="com.ilvyou.system.entity.SysUserEntity" >  
  6.         <id property="id" column="ID" jdbcType="VARCHAR"/>  
  7.         <result property="loginName" column="LOGIN_NAME" jdbcType="VARCHAR"/>  
  8.         <result property="loginPass" column="LOGIN_PASS" jdbcType="VARCHAR"/>  
  9.         <result property="userType" column="USER_TYPE" jdbcType="VARCHAR"/>  
  10.         <result property="regDate" column="REG_DATE" jdbcType="CHAR"/>  
  11.         <result property="email" column="EMAIL" jdbcType="VARCHAR"/>  
  12.         <result property="mobile" column="MOBILE" jdbcType="VARCHAR"/>  
  13.         <result property="qq" column="QQ" jdbcType="VARCHAR"/>  
  14.         <result property="photo" column="PHOTO" jdbcType="VARCHAR"/>  
  15.         <result property="cardType" column="CARD_TYPE" jdbcType="VARCHAR"/>  
  16.         <result property="cardValue" column="CARD_VALUE" jdbcType="VARCHAR"/>  
  17.         <result property="userName" column="USER_NAME" jdbcType="VARCHAR"/>  
  18.         <result property="userSex" column="USER_SEX" jdbcType="VARCHAR"/>  
  19.         <result property="userBir" column="USER_BIR" jdbcType="CHAR"/>  
  20.         <result property="userAddr" column="USER_ADDR" jdbcType="VARCHAR"/>  
  21.         <result property="jobName" column="JOB_NAME" jdbcType="VARCHAR"/>  
  22.         <result property="jobAddr" column="JOB_ADDR" jdbcType="VARCHAR"/>  
  23.         <result property="jobTel" column="JOB_TEL" jdbcType="VARCHAR"/>  
  24.         <result property="bornAddr" column="BORN_ADDR" jdbcType="VARCHAR"/>  
  25.         <result property="userStatus" column="USER_STATUS" jdbcType="INTEGER"/>  
  26.         <result property="roleType" column="ROLE_TYPE" jdbcType="VARCHAR"/>  
  27.     </resultMap>  
  28.   
  29.     <sql id="Base_Column_List">  
  30.     ID          ,  
  31.     LOGIN_NAME  ,  
  32.     LOGIN_PASS  ,  
  33.     USER_TYPE   ,  
  34.     REG_DATE    ,  
  35.     EMAIL       ,  
  36.     MOBILE      ,  
  37.     QQ          ,  
  38.     PHOTO       ,  
  39.     CARD_TYPE   ,  
  40.     CARD_VALUE  ,  
  41.     USER_NAME   ,  
  42.     USER_SEX    ,  
  43.     USER_BIR    ,  
  44.     USER_ADDR   ,  
  45.     JOB_NAME    ,  
  46.     JOB_ADDR    ,  
  47.     JOB_TEL     ,  
  48.     BORN_ADDR   ,  
  49.     USER_STATUS ,  
  50.     ROLE_TYPE  
  51.     </sql>  
  52.   
  53.     <sql id="select_by_page_outter_orderby_sql" >  
  54.       <if test="orderByClause != null">    order by ${orderByClause}   </if>   
  55.     </sql>  
  56.   
  57.   
  58.     <!--select mothed-->  
  59.     <select id="selectByPrimaryKey" parameterType="String" resultMap="SysUserEntityResultMap">  
  60.     select   
  61.     <include refid="Base_Column_List" />  
  62.     from SYS_USER  
  63.     where ID = #{id,jdbcType=VARCHAR}  
  64.     </select>  
  65.       
  66.     <!--insert mothed-->  
  67.     <insert id="insert" parameterType="com.ilvyou.system.entity.SysUserEntity">  
  68.     insert into SYS_USER (  
  69.         <include refid="Base_Column_List" />  
  70.       )  
  71.     values (  
  72.     #{id,jdbcType=VARCHAR},  
  73.     #{loginName,jdbcType=VARCHAR},  
  74.     #{loginPass,jdbcType=VARCHAR},  
  75.     #{userType,jdbcType=VARCHAR},  
  76.     #{regDate,jdbcType=CHAR},  
  77.     #{email,jdbcType=VARCHAR},  
  78.     #{mobile,jdbcType=VARCHAR},  
  79.     #{qq,jdbcType=VARCHAR},  
  80.     #{photo,jdbcType=VARCHAR},  
  81.     #{cardType,jdbcType=VARCHAR},  
  82.     #{cardValue,jdbcType=VARCHAR},  
  83.     #{userName,jdbcType=VARCHAR},  
  84.     #{userSex,jdbcType=VARCHAR},  
  85.     #{userBir,jdbcType=CHAR},  
  86.     #{userAddr,jdbcType=VARCHAR},  
  87.     #{jobName,jdbcType=VARCHAR},  
  88.     #{jobAddr,jdbcType=VARCHAR},  
  89.     #{jobTel,jdbcType=VARCHAR},  
  90.     #{bornAddr,jdbcType=VARCHAR},  
  91.     #{userStatus,jdbcType=INTEGER},  
  92.     #{roleType,,jdbcType=VARCHAR}  
  93.     )  
  94.     </insert>  
  95.   
  96.     <insert id="batchInsert" >      
  97.     insert into SYS_USER (<include refid="Base_Column_List" />)    
  98.     values       
  99.     <foreach collection="list" item="item" index="index" separator=",">  
  100.     (  
  101.     #{item.id,jdbcType=VARCHAR},  
  102.     #{item.loginName,jdbcType=VARCHAR},  
  103.     #{item.loginPass,jdbcType=VARCHAR},  
  104.     #{item.userType,jdbcType=VARCHAR},  
  105.     #{item.regDate,jdbcType=CHAR},  
  106.     #{item.email,jdbcType=VARCHAR},  
  107.     #{item.mobile,jdbcType=VARCHAR},  
  108.     #{item.qq,jdbcType=VARCHAR},  
  109.     #{item.photo,jdbcType=VARCHAR},  
  110.     #{item.cardType,jdbcType=VARCHAR},  
  111.     #{item.cardValue,jdbcType=VARCHAR},  
  112.     #{item.userName,jdbcType=VARCHAR},  
  113.     #{item.userSex,jdbcType=VARCHAR},  
  114.     #{item.userBir,jdbcType=CHAR},  
  115.     #{item.userAddr,jdbcType=VARCHAR},  
  116.     #{item.jobName,jdbcType=VARCHAR},  
  117.     #{item.jobAddr,jdbcType=VARCHAR},  
  118.     #{item.jobTel,jdbcType=VARCHAR},  
  119.     #{item.bornAddr,jdbcType=VARCHAR},  
  120.     #{item.userStatus,jdbcType=INTEGER},  
  121.     #{item.roleType,jdbcType=VARCHAR}  
  122.     )  
  123.     </foreach>  
  124.     </insert>  
  125.   
  126.   
  127.     <update id="updateByPrimaryKeySelective" parameterType="com.ilvyou.system.entity.SysUserEntity">  
  128.     update SYS_USER  
  129.     <set>  
  130.       <if test="id != null">  
  131.        ID = #{id,jdbcType=VARCHAR},  
  132.       </if>  
  133.       <if test="loginName != null">  
  134.        LOGIN_NAME = #{loginName,jdbcType=VARCHAR},  
  135.       </if>  
  136.       <if test="loginPass != null">  
  137.        LOGIN_PASS = #{loginPass,jdbcType=VARCHAR},  
  138.       </if>  
  139.       <if test="userType != null">  
  140.        USER_TYPE = #{userType,jdbcType=VARCHAR},  
  141.       </if>  
  142.       <if test="regDate != null">  
  143.        REG_DATE = #{regDate,jdbcType=CHAR},  
  144.       </if>  
  145.       <if test="email != null">  
  146.        EMAIL = #{email,jdbcType=VARCHAR},  
  147.       </if>  
  148.       <if test="mobile != null">  
  149.        MOBILE = #{mobile,jdbcType=VARCHAR},  
  150.       </if>  
  151.       <if test="qq != null">  
  152.        QQ = #{qq,jdbcType=VARCHAR},  
  153.       </if>  
  154.       <if test="photo != null">  
  155.        PHOTO = #{photo,jdbcType=VARCHAR},  
  156.       </if>  
  157.       <if test="cardType != null">  
  158.        CARD_TYPE = #{cardType,jdbcType=VARCHAR},  
  159.       </if>  
  160.       <if test="cardValue != null">  
  161.        CARD_VALUE = #{cardValue,jdbcType=VARCHAR},  
  162.       </if>  
  163.       <if test="userName != null">  
  164.        USER_NAME = #{userName,jdbcType=VARCHAR},  
  165.       </if>  
  166.       <if test="userSex != null">  
  167.        USER_SEX = #{userSex,jdbcType=VARCHAR},  
  168.       </if>  
  169.       <if test="userBir != null">  
  170.        USER_BIR = #{userBir,jdbcType=CHAR},  
  171.       </if>  
  172.       <if test="userAddr != null">  
  173.        USER_ADDR = #{userAddr,jdbcType=VARCHAR},  
  174.       </if>  
  175.       <if test="jobName != null">  
  176.        JOB_NAME = #{jobName,jdbcType=VARCHAR},  
  177.       </if>  
  178.       <if test="jobAddr != null">  
  179.        JOB_ADDR = #{jobAddr,jdbcType=VARCHAR},  
  180.       </if>  
  181.       <if test="jobTel != null">  
  182.        JOB_TEL = #{jobTel,jdbcType=VARCHAR},  
  183.       </if>  
  184.       <if test="bornAddr != null">  
  185.        BORN_ADDR = #{bornAddr,jdbcType=VARCHAR},  
  186.       </if>  
  187.       <if test="userStatus != null">  
  188.        USER_STATUS = #{userStatus,jdbcType=INTEGER},  
  189.       </if>  
  190.       <if test="roleType != null">  
  191.        ROLE_TYPE = #{roleType,jdbcType=VARCHAR},  
  192.       </if>  
  193.      </set>  
  194.     where ID = #{id,jdbcType=VARCHAR}  
  195.      </update>  
  196.   
  197.   
  198.     <update id="batchUpdateByPrimaryKey" >      
  199.     <foreach collection="list" item="item" index="index">          
  200.     update SYS_USER set   
  201.       LOGIN_NAME = #{item.loginName,jdbcType=VARCHAR},  
  202.       LOGIN_PASS = #{item.loginPass,jdbcType=VARCHAR},  
  203.       USER_TYPE = #{item.userType,jdbcType=VARCHAR},  
  204.       REG_DATE = #{item.regDate,jdbcType=CHAR},  
  205.       EMAIL = #{item.email,jdbcType=VARCHAR},  
  206.       MOBILE = #{item.mobile,jdbcType=VARCHAR},  
  207.       QQ = #{item.qq,jdbcType=VARCHAR},  
  208.       PHOTO = #{item.photo,jdbcType=VARCHAR},  
  209.       CARD_TYPE = #{item.cardType,jdbcType=VARCHAR},  
  210.       CARD_VALUE = #{item.cardValue,jdbcType=VARCHAR},  
  211.       USER_NAME = #{item.userName,jdbcType=VARCHAR},  
  212.       USER_SEX = #{item.userSex,jdbcType=VARCHAR},  
  213.       USER_BIR = #{item.userBir,jdbcType=CHAR},  
  214.       USER_ADDR = #{item.userAddr,jdbcType=VARCHAR},  
  215.       JOB_NAME = #{item.jobName,jdbcType=VARCHAR},  
  216.       JOB_ADDR = #{item.jobAddr,jdbcType=VARCHAR},  
  217.       JOB_TEL = #{item.jobTel,jdbcType=VARCHAR},  
  218.       BORN_ADDR = #{item.bornAddr,jdbcType=VARCHAR},  
  219.       USER_STATUS = #{item.userStatus,jdbcType=INTEGER},  
  220.       ROLE_TYPE = #{item.roleType,jdbcType=VARCHAR}  
  221.     where ID = #{item.id,jdbcType=VARCHAR}  
  222.     </foreach>  
  223.     </update>  
  224.   
  225.   
  226.   
  227.     <!--delete mothed-->  
  228.     <delete id="deleteByPrimaryKey" parameterType="String">  
  229.         delete from SYS_USER  
  230.         where ID = #{id,jdbcType=VARCHAR}  
  231.     </delete>  
  232.   
  233.     <delete id="batchDelete">  
  234.         delete from SYS_USER   
  235.         where ID in (  
  236.         <foreach collection="list" item="item" index="index" separator=",">  
  237.             #{item.id,jdbcType=VARCHAR}  
  238.         </foreach>  
  239.         )  
  240.     </delete>  
  241.   
  242. </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中写法,如代码片段:

  1. WHERE ID = #id:VARCHAR#  

mybatis中写法,如代码片段:

  1. where ID = #{id,jdbcType=VARCHAR}  
2.5.6 iBatis/MyBatis 调用存储过程的写法


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

  1. <parameterMap id="swapParameters" class="map" >       
  2.     
  3.  <parameter property="contactId" jdbcType="INTEGER" javaType="java.lang.Integer" mode="IN"/>       
  4.     
  5.  <parameter property="firstName" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>         
  6.     
  7.  <parameter property="lastName" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>       
  8.     
  9. </parameterMap>       
  10.     
  11.        
  12.     
  13. <procedure id="swapContactName" parameterMap="swapParameters" >       
  14.     
  15. {call swap_contact_name (?, ?,?)}        
  16.     
  17. </procedure>     


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

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

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

2.6 ibatis和mybatis与spring的集成配置

ibatis的配置

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

mybatis的配置

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


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


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约