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 configurationPUBLIC "-//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_PROPERTYWHERE ID = #id:VARCHAR# AND<include refid="COMMON_JUDGEMENT_RULE.Judge_Status_ChannelId_CompanyId" /></select><!-- 删除执行的是修改状态为1,表示已删除 --><update id="deleteByPrimaryKey" parameterClass="com.test.biz.dto.PpClassProperty">UPDATEPP_CLASS_PROPERTYSET STATUS = 1where 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_PROPERTYWHERE 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">SELECTCOUNT(ID)FROM PP_CLASS_PROPERTYWHERE 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 CLASSNAMEFROMPP_CLASS_PROPERTY P,PP_PROPERTY PP,PP_CLASS PCWHERE 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.IDAND P.CHANNEL_ID =PC.CHANNEL_ID AND P.CHANNEL_ID = PP.CHANNEL_IDAND P.COMPANY_ID =PC.COMPANY_ID AND P.COMPANY_ID = PP.COMPANY_IDAND P.STATUS=0 ANDPP.STATUS=0 AND PC.STATUS=0</select><!--根据类目id查询类目属性(包含类目名称和属性名称) 查询总数 --><select id="countPageFindPpClassPropertyByClassId" resultClass="integer"parameterClass="map">SELECTCOUNT(1)FROMPP_CLASS_PROPERTY P,PP_PROPERTY PP,PP_CLASS PCWHERE 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.IDAND P.CHANNEL_ID =PC.CHANNEL_ID AND P.CHANNEL_ID = PP.CHANNEL_IDAND P.COMPANY_ID =PC.COMPANY_ID AND P.COMPANY_ID = PP.COMPANY_IDAND P.STATUS=0 ANDPP.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_PROPERTYWHERECLASS_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_USERwhere 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_USERwhere 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 包下,其中的方法也作了微调。总之,代码层面公开的部分改动较少,不会给开发者造成较大的移植成本。

来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/gossip/p/6064414.html

MyBatis_ibatis和mybatis的区别【转】相关推荐

  1. Mybatis-Plus和Mybatis的区别

    原文:https://blog.csdn.net/qq_34508530/article/details/88943858 . . . . . . 区别一 如果Mybatis Plus是扳手,那Myb ...

  2. Ibatis与Mybatis的区别—侧重于Ibatis

    目录 一.什么是Ibatis? 1.iBatis是一款轻量级的持久化框架 2.iBatis最大的特点是将SQL语句与Java代码分离 3.iBatis具有以下几个关键组成部分: 二.Ibatis与My ...

  3. 木木的Java知识整理——JDBC与MyBatis的区别

    看了几篇大佬的相关整理,可以总结成如下几部分. JDBC与MyBatis的区别 一.各自定义 1.1 JDBC 1.2 MyBatis 二.JDBC与MyBatis的区别 一.各自定义 1.1 JDB ...

  4. hibernate与mybatis的区别和应用场景

    mybatis 与 hibernate 的区别和应用场景(转) 1    Hibernate : 标准的ORM(对象关系映射) 框架: 不要用写sql, sql 自动语句生成: 使用Hibernate ...

  5. 框架:Hibernate和Mybatis的区别

    Mybatis和hibernate不同, Mybatis不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并 ...

  6. JPA、Hibernate、Mybatis的区别

    2019独角兽企业重金招聘Python工程师标准>>> 1.概念: Hibernate :Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装 ...

  7. SSH(Struts,Spring,Hibernate )和SSM(SpringMVC,Spring,MyBatis )的区别,抽丝剥茧的给你讲清楚

    SSH 通常指的是 Struts2 做前端控制器,Spring 管理各层的组件,Hibernate 负责持久化层. SSM 则指的是 SpringMVC 做前端控制器,Spring 管理各层的组件,M ...

  8. ibatis和mybatis的区别

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

  9. hibernate 和 mybatis 的区别

    [转载]:JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结 转载于:https://www.cnblogs.com/virgosnail/p/10054987.html

最新文章

  1. 何恺明的GN之后,权重标准化新方法能超越GN、BN吗? | 技术头条
  2. LeetCode 98. Validate Binary Search Tree--C++解法--判断是否是BST--递归,迭代做法,中序遍历
  3. 【算法竞赛学习】资金流入流出预测-挑战Baseline_建模预测
  4. GNU编译优化级别-O -O1 -O2 -O3
  5. python 百度ocr识别_Python使用百度Ocr识别文字保存CSV
  6. 并行算法第五讲:Pthread编程
  7. python实现文件格式转换_python实现快速文件格式批量转换的方法
  8. 计算机系统基础知识——校验码之海明码(Hamming Code)
  9. numpy教程:统计函数Statistics
  10. sm4 的s盒_国密SM4算法
  11. EBS财务模块表结构
  12. lisp角度转换弪度_弧度角度换算(弧度角度换算器)
  13. windbg 常用命令
  14. 0x3f3f3f3f是什么意思
  15. 51单片机进阶案例(1)——基于MATLAB GUI的单片机串口与PC的通信实现实时时钟和双向可调时钟功能(利用DS1302时钟芯片和LCD1602液晶屏)
  16. 动态规划DP模板题汇总
  17. DID:仅有几个实验组样本的倍分法(双重差分)
  18. 世界各个国家坐标位置和中国各个省份坐标位置json格式
  19. Java实现--基于服务器的多用户聊天室
  20. 小草科技4G/5G多卡聚合融合通信设备在消防行业领域解决方案

热门文章

  1. python去掉字符串最外侧的引号_疯狂Python讲义第二章读书笔记
  2. python安全攻防---scapy使用
  3. php数组的下标、extract函数
  4. 392. 判断子序列 golang 关于布尔类型返回值判断的思考
  5. Django学习笔记《二》图书管理系统
  6. linux网路编程之多进程并发服务器
  7. gethostbyname() 函数说明
  8. linux网络编程(四)线程池
  9. 使用Tomcat+MyEclipse开发Java Web配置
  10. 这是一份面向Android开发者的复习指南,成功入职字节跳动