zoukankan      html  css  js  c++  java
  • MyBatis_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" />
    <pre name="code" class="html">	<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 调用存储过程的方法,通过使用 <procedure> 元素进行存储过程的调用:

    <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 包下,其中的方法也作了微调。总之,代码层面公开的部分改动较少,不会给开发者造成较大的移植成本。





  • 相关阅读:
    在Eclipse上实现简单的JDBC增删查改操作
    Java学习路线:day12 面向对象(中)
    Java学习路线:day11 客户信息管理软件
    Android个人手机通讯录开发详解
    解决:keeps stopping(停止运行)
    Java学习路线:day10 面向对象(上)3
    2020最新版大数据学习路线
    Java学习路线:day9 面向对象(上)2
    一个简单的ASP登录页面
    Python笔记_第四篇_高阶编程_检测_2.对类进行单元检测
  • 原文地址:https://www.cnblogs.com/gossip/p/6064414.html
Copyright © 2011-2022 走看看