Ibatis 是 Mybatis 的前身,两者都是优秀的持久层框架。

区别:

1、mybatis 实现接口绑定,不需要具体接口实现类。但是需要在xml文件中 的 namespace 绑定具体的接口。

这个实现原理是JDK的动态代理,原理会在下一篇博客更新。

@Component
public interface XXXDAO extends BaseDAO<XXXDO, Long> {
}
<mapper namespace="com.xxx.dao.XXXDAO" >
</mapper>

ibatis 需要定义具体接口的实现,并且在接口实现中获取SqlMapClient以及绑定xml文件。

<sqlMap namespace="namespace名称" >
</sqlMap>
public class XXXDAOImpl extends SqlMapClientDaoSupport implements XXXDAO {

    @Override
public Long insert(XXX xxx) throws DataAccessException {
Object id = getSqlMapClientTemplate().insert("namespace名称.语句id", xxx);
return (Long) id;
}

2、XML文件不同

1)mybatis用的是<mappers> 标签,ibatis 是用 <sqlMap> 标签

2)mybatis 支持 ognl 表达式,ibatis不支持

3)mybatis 接收参数的方式 #{id} ${id}$ ,ibatis 是 #id# $id$

ps: #与$ 的区别是# 是作为参数传递,预编译使用

$ 是作为sql 一部分拼接,会有sql注入的风险

4)mybatis 参数类型是 parameterType,ibatis 参数类型是parameterClass

5)动态语句写法不同

mybatis

<update id="updateByPrimaryKeySelective" parameterType="xxxDO" >
update xxx
<set >
<if test="activityWarmupSwitch != null" >
activity_warmup_switch = #{activityWarmupSwitch,jdbcType=CHAR},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
</update>

ibatis

<update id="updateCommentById" parameterClass="xxxDO" >
UPDATE xxx
<dynamic prepend="SET" >
<isNotNull property="fuId" prepend="," >
<![CDATA[
fu_id = #fuId#
]]>
</isNotNull>
</dynamic>
WHERE id = #id#
</update>

6)mybatis 迭代用的是 foreach ,ibatis用的是iterator

MyBatis 与Ibatis 区别的更多相关文章

  1. mybatis和ibatis区别

     ibatis本是apache的一个开源项目,2010年这个项目由apache software foundation 迁移到了google code,并且改名为mybatis.  1.Mybat ...

  2. Mybatis与Ibatis的区别

    Mybatis与Ibatis的区别: 1.Mybatis实现了接口绑定,使用更加方便 在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件, 而Mybatis实现了DAO接口 ...

  3. mybatis、ibatis 和spring集成

    mybatis是ibatis的升级版,spring也有自带mybatis的orm.所以,搭建ibatis的框架也会有多种方式(我这里mybatis是3.0的,ibatis是2.3的,spring是3. ...

  4. hibernate和mybatis思想,区别,优缺点

    Hibernate 简介 Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行.程序员往往只 ...

  5. mybatis 参数为list时,校验list是否为空, mybatis ${}与#{}的区别,Mybatis sql in

    1.mybatis 参数为list时,校验list是否为空 2. mybatis ${}与#{}的区别 简单来说#{} 解析的是占位符?可以防止SQL注入, 比如打印出来的语句 select * fr ...

  6. 旧调重弹Hibernate与Ibatis区别——深入架构设计

    对于一个粗学者而言一言概况就是:ibatis非常简单易学,hibernate相对较复杂,门槛较高.  但是,hibernate对数据库结构提供了较为完整的封装,hibernate的o/r mappin ...

  7. mybatis 参数为list时,校验list是否为空, mybatis ${}与#{}的区别

    一.参数list时,先判断是否为空,否则会报错. 二.mybatis ${}与#{}的区别 简单来说#{} 解析的是占位符?可以防止SQL注入, 比如打印出来的语句 select * from tab ...

  8. MySQL 和 Oracle 在 MyBatis 使用中的区别

    MySQL 和 Oracle 在 MyBatis 使用中的区别: 区别 MySQL Oracle 存储过程的参数模式 mode 为 IN 时,是否需要指定 jdbcType 不需要:MyBatis 为 ...

  9. 3. mybatis # 与 $ 的区别

    mybatis # 与 $ 的区别 1.# % 号必须写在test中 应用场景:模糊查询 配置文档mapper.xml <select id="selectBlogByTitle&qu ...

随机推荐

  1. DataFrame数据合并

    一.join 作用:默认情况下,他是把行索引相同的数据合并到一起注意:以左为准,没有的部分用NaN补全 例子 import pandas as pd import numpy as np df1 = ...

  2. scrapy selector选择器

    这部分内容属于补充内容 1.xpath() 2.css() 3.正则表达式 # 多个值,列表 response.xpath('//a/text()').re('(.*?):\s(.*)') # 取第一 ...

  3. Vue 组件 传值

    注意 Vue模板只能有一个对象,要想用多个对象时用div包裹 一.父组件->子组件 通过props 1.子组件: 声明:proprs =[‘xx’],xx是在父组件中引用子组件,子组件的属性(t ...

  4. [新详细]让Keil5续签到2032年的办法,不可商用

    # 使用方法和以前的版本一样,MDK 或者C51等均适用,供学习与参考.更多需要到这里购买→ → Keil官网:[http://www.keil.com/](http://www.keil.com/) ...

  5. T117897 七步洗手法 / PJT1(洛谷)

    题目:现在有n个人需要依次使用1个洗手池洗手,进行一步洗手需要1单位时间.他们每个人至少会进行一步洗手,但是却不一定进行了完整的七部洗手. 现在你知道了他们总共的洗手时间为t,请你推测他们有多少人进行 ...

  6. 创建dynamics CRM client-side (九) - 用JS来获取look up 信息

    我们用以下的代码可以获取到look up 的信息. 大家可以查看微软文档来查看更多关于 lookup object的信息 https://docs.microsoft.com/en-us/powera ...

  7. iperf安装使用教程

    https://linoxide.com/monitoring-2/install-iperf-test-network-speed-bandwidth/

  8. Git详解之基础使用

    前言 读完本章你就能上手使用 Git 了.本章将介绍几个最基本的,也是最常用的 Git 命令,以后绝大多数时间里用到的也就是这几个命令.读完本章,你就能初始化一个新的代码仓库,做一些适当配置:开始或停 ...

  9. laravel 初学路由简单介绍

    文档中的路由详细演示[初学laravel]对应laravel 的框架目录:routes/web.php 路由的格式一:Route::get($uri,$callback); 1.简单的浏览器输出 Ro ...

  10. 页面置换算法之Clock算法

    1.前言 缓冲池是数据库最终的概念,数据库可以将一部分数据页放在内存中形成缓冲池,当需要一个数据页时,首先检查内存中的缓冲池是否有这个页面,如果有则直接命中返回,没有则从磁盘中读取这一页,然后缓存到内 ...