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 包下,其中的方法也作了微调。总之,代码层面公开的部分改动较少,不会给开发者造成较大的移植成本。
转自http://blog.csdn.net/geyouchao/article/details/51354571
相关推荐
描述中的“一键转换,不用自己再手动替换标签”意味着这个工具可以自动化处理iBATIS与MyBatis之间的转换工作,减少了开发者手动修改大量代码的时间和精力。通常,这样的转换涉及到的主要任务包括: 1. **XML配置...
### myBatis与ibatis的区别 #### 一、概述 myBatis与ibatis是两款在Java领域中非常流行的持久层框架,它们均基于SQL映射机制,为开发者提供了便捷的方式来处理数据库操作。两者间的关系密切,ibatis是myBatis的...
iBatis 是一款著名的 Java 数据库访问框架,它在早期版本(iBatis 2)中使用 XML 配置文件来定义 SQL ...通过理解 iBatis 2 和 Mybatis 3 在 SQL 映射、参数映射和事务管理等方面的差异,可以更有效地完成迁移任务。
**选用Ibatis与Hibernate的区别**: 1. **灵活性**:Ibatis允许直接编写SQL,适合复杂的查询和性能优化。Hibernate则倾向于自动化,可能在复杂查询方面不够灵活。 2. **学习曲线**:Hibernate提供了全套的ORM解决...
这个文件可能会涵盖两者之间的主要差异,如何将现有的iBatis代码迁移至MyBatis,以及MyBatis的新特性和优势。 `iBATIS-SqlMaps-2_cn.pdf` 文件则很可能是iBatis 2.0的中文版官方文档,这对于初学者和开发者来说极其...
由于Spring的ORM包中不包含MyBatis,因此这里采用的是旧版iBatis(即MyBatis的前身)。在这种模式下,配置文件会有所差异,且需要的jar包包括Spring的ORM支持和其他相关库。 在这些整合方式中,MyBatis和Spring的...
标题 "根据mybatis/ibatis sqlmapper文件解析生成数据库表" 暗示了我们将会探讨一个关于MyBatis或iBatis框架的工具,它能够解析SQL映射文件并根据这些文件自动生成数据库表。这个过程对于快速构建数据库模型,尤其是...
MyBatis是一个流行的Java持久层框架,用于简化与数据库交互的过程,它允许开发者以一种近乎透明的方式访问数据库。MyBatis 3.4.6版本是该框架的一个更新版本,它相较于早期版本有许多改进之处。该版本提供了一个简洁...
虽然MyBatis是从iBATIS发展而来,但两者在设计和使用上有一些差异。MyBatis更加强调代码的简洁性和灵活性,提供了更多的高级特性,如注解支持、自动结果映射等。同时,MyBatis社区活跃,更新频繁,对新特性的支持...
Mybatis与Ibatis都是流行的持久层框架,它们在Java开发中用于处理数据库操作。然而,两者之间存在一些显著的差异,这些差异影响了开发者的选择和使用方式。 首先,Mybatis相对于Ibatis(以前称为ibatis)的一个关键...
Ibatis是一款轻量级的Java持久层框架,它与MyBatis类似,允许开发者将SQL语句直接写在XML配置文件中,实现了SQL与Java代码的解耦,提高了开发效率和灵活性。 该工具的使用通常涉及到以下几个核心知识点: 1. **...
Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责简化数据库操作,将SQL语句与Java代码分离,使得开发人员能够更加专注于业务逻辑。在本主题中,我们将深入探讨Ibatis的两个特定版本:ibatis2.3.4.8....
- **工作量差异**:MyBatis通常需要手动编写SQL语句,而Hibernate则能自动生成大部分代码。 - **对象模型**:MyBatis采用简单的POJO映射方式,而Hibernate则支持更为复杂的对象关系映射。 - **性能对比**:由于HQL与...
虽然MyBatis是iBatis的升级版,但两者在一些细节上仍存在差异。MyBatis增加了注解支持,使得SQL映射可以直接写在Java类或接口上,减少了XML配置文件的使用。此外,MyBatis还增强了对集合类型和自定义类型处理器的...
Mybatis是一个基于Java的持久层框架,前身是iBatis。它通过XML或注解来配置和映射原生信息,将Java中的POJO(Plain Old Java Objects,普通Java对象)映射成数据库中的记录。Mybatis通过简单的配置即可实现数据库的...
**ibatis**,现在通常被称为**MyBatis**,是一个支持普通SQL查询、存储过程以及高级映射的优秀开源持久层框架。ibatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。ibatis可以使用简单的XML或注解...
首先,iBatis,由MyBatis的前身,是一个轻量级的框架,它主要关注SQL的编写。iBatis的核心理念是将SQL语句与Java代码分离,通过XML配置文件或注解来定义数据层的映射关系。这使得开发者能够灵活地控制SQL查询,包括...
通过实现 `org.apache.ibatis.interceptor.Interceptor` 接口并覆盖 `intercept` 方法,我们可以定制拦截行为。 下面,我们将逐步解析如何创建一个分页拦截器: 1. **创建拦截器类**:首先,创建一个新的 Java 类...
尽管MyBatis是iBATIS的后继者,但两者在设计上有一定差异。MyBatis引入了注解支持,使得SQL映射更加简洁;同时,MyBatis的缓存机制更为完善,支持更多自定义配置;此外,MyBatis的动态SQL功能更为强大,支持更多的...
Mybatis逆向工程是开发过程中一个非常实用的功能...总的来说,Mybatis逆向工程是提高开发效率的一个重要工具,通过合理的配置,可以帮助我们快速构建与数据库交互的基础框架,从而将更多的精力集中在业务逻辑的实现上。