2010年,apache的Ibatis框架停止更新,并移交给了google团队,同时更名为MyBatis。从2010年后Ibatis在没更新过,彻底变成了一个孤儿框架。一个没人维护的框架注定被mybatis拍在沙滩上。

1. 入参无需用对象封装(或者map封装),使用@Param注解

当Ibatis需要接收超过一个参数时,则需要将多个参数封装成对象,这个时候会产生很多Domain查询类。还有很多同学偷懒,写用hashmap传参,这种方式会彻底丧失代码的优雅性,同时hashmap方式很容易造成bug

如果你的映射器的方法需要多个参数, 这个注解可以被应用于映射器的方法 参数来给每个参数一个名字。否则,多 参数将会以它们的顺序位置来被命名 (不包括任何 RowBounds 参数) 比如。 #{param1} , #{param2} 等 , 这 是 默 认 的 。 使 用 @Param(“person”),参数应该被命名为 #{person}。

示例:

    List<BizDO> queryByDomainCodeAndKey(@Param("bizDomainCode") String bizDomainCode,@Param("status") Integer status,@Param("key") String key,@Param("startIndex") Integer startIndex,@Param("pageSize") Integer pageSize);

2. 无需写ResultMap。开启mapUnderscoreToCamelCase配置即可

在ibatis的sql文件中,所有的跟数据库表对应的DataObject类都需要写冗长的映射配置。当数据库表增加了字段时要对这段配置进行同步修改。下划线自动映射到驼峰规则彻底摒弃了这个多余的配置。这个特性同样极大的提高了生产力

是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射

3. 无需写的DAO层实现类

在Ibatis中,每个sql的xml文件都有一个namespace,而要调用文件中的sql时需要用namespace + sql id 映射到具体的sql。这样代码里徒增很多字符串常量。
Mybatis实现了DAO接口与xml映射文件的绑定,接口的方法名自动映射到sql的id。不再需要代码里拼接sqlid。
实现机制参考我的另外一篇文章 Mybatis只有接口没有实现类的原理

4. 支持Ognl表达式

在Mybatis的If表达式里可以使用Ognl表达式,相对于Ibatis只能使用固定的标签,这个特性太强大了。你可以使用任何第三方框架的方法进行判断。
缺点也在于,Ognl表达式太灵活,不容易驾驭。有几次印象深刻的mybatis的问题,都是ognl表达式造成的,排查了很久。

 <update id="update" parameterType="BizModelDO">UPDATE table_name<set><if test="!@org.springframework.util.StringUtils@isEmpty(modelName)">model_name= #{modelName},</if><if test="!@org.springframework.util.StringUtils@isEmpty(parentCode)">parent_code = #{parentCode},</if><if test="height != null">height = #{height},</if><if test="number != null">number = #{number},</if></set>WHERE model_code = #{modelCode}</update>

5.pagehelper,sorthelper等插件的支持

在Ibatis下,每个分页查询都需要写两条SQL,一条查询sql,还有一条统计总数的sql,两个sql几乎一模一样。
在MyBatis下,配置下pagehelper插件,就只需要写一条查询sql。统计的sql会由pagehelper插件来完成。同样提高了生产效率。
pagehelper github地址

没有理由再选择Ibatis作为ORM框架,拥抱MyBatis吧。

mybatis相对于ibatis的优势相关推荐

  1. XML具有哪些特点?相对于HTML的优势

    xml具有哪些特点?相对于html的优势? 1什么是html html被称为超文本标记语言, 是一种描述性语言,用html 可以创建能在互联网上传输的信息页,是构成网页文档的主要语言,它是由很多的标签 ...

  2. 详解: Spark 相对于MapReduce的优势(为什么MapReduce性能不理想)

    Spark相对于MapReduce的优势 一:MapReduce存在的问题 1**. MapReduce框架局限性** 1)仅支持Map和Reduce两种操作 2)处理效率低效. a)Map中间结果写 ...

  3. springMVC 相对于 Structs 的优势

    智者说,没有经过自己的思考和估量,就不能接受别人的东西.资料只能是一个参考,至于是否正确,还得自己去分辨 SpringMVC相对于Structs的几个优势: 1.springMVC安全性更高,stru ...

  4. MyBatis实战——前身iBatis、基础环境搭建和如何钓鱼

    (一)前身iBatis 网上发现MyBatis书很少,因为旧项目用到的是ibatis,所以先大致过了iBatis,因为太老,所以基本上讲解的东西好少,但是还有<iBatis实战>这本书,再 ...

  5. SpringBoot mybatis org.apache.ibatis.io.ResolverUtil

    mybatis 注解方式 2018-07-02 17:00:41.069  WARN 11564 --- [  restartedMain] org.apache.ibatis.io.Resolver ...

  6. RocketMQ消息存储结构分析及相对于Kafka的优势

    在RocketMQ中,消息存储是由CommitLog和ConsumerQueue配合完成 消息存储结构 首先我们先来看下整体的消息存储结构 基本过程: 生产者在生产消息的时候是将消息存储在Commit ...

  7. Mybatis org.apache.ibatis.ognl.NoSuchPropertyException:xxx问题解决

    问题描述: org.apache.ibatis.ognl.NoSuchPropertyException: com.entity.UserEntity.createDate 问题分析: 1.UserE ...

  8. mybatis org.apache.ibatis.ognl.ParseException: Encountered “ <IDENT> “AND ““ at line 1, column 14.

    mybatis中if判断的and 要小写,大写报错的原因 <if test="(personName != null and personName!='') || (companyNa ...

  9. mybatis面试题及回答

    1.什么是mybatis?ORM是什么?JPA是什么? 2.讲下mybatis的缓存? 1一级二级都是基于PerpetualCache的HashMap本地缓存: 2一级缓存是SQLSession级别的 ...

最新文章

  1. 单片机找工作好找吗?不懂英语怎么学会单片机?
  2. 哥德尔90年前的「不完备性定理」,奠定了计算机与AI的理论基础
  3. 初学算法-快速排序与线性时间选择(Deterministic Selection)的C++实现
  4. 标 题: 腾讯面试题目(PHP程序员)
  5. u盘修复linux系统,360u盘修复工具官方版u盘pe安装linux系统
  6. mac共享单个磁盘_如何与您的所有设备共享酒店的单个Wi-Fi连接
  7. ★★★【庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术系列—(1)读者序】★★★...
  8. jquery动态改变div宽度和高度
  9. 安装部署elasticsearch过程详解
  10. 图像语义分割(6)-RefineNet:用于高分辨率图像语义分割的带有恒等映射的多路精细网络
  11. 在Windows系统上安装PHP工作环境
  12. C++11 关键字noexcept 替代 throw
  13. SVN 创建分支,分支与主干的合并
  14. fgo服务器维护补偿,FGO游戏内显示问题修复通知 全服补偿2个金苹果
  15. 桌面上计算机图标怎么改成中文,怎么修改电脑桌面上的图标
  16. STM32实战总结:HAL之GPIO
  17. python抬笔_『怎样在python里让海龟画图抬笔落笔?』
  18. vscode 用户设置与工作区设置
  19. 今年上半年消费市场趋势_您今年需要了解的8种趋势
  20. 搜狐号按作者火车头采集规则

热门文章

  1. swagger展示属性枚举值
  2. Tableau 数据可视化之项目一 教育网站指标评估
  3. win10和Ubuntu双系统,修改默认启动项和启动延迟时间
  4. 分布式认知在计算机应用系统,分布式任务分布式认知对高校计算机基础课程影响论文...
  5. 工业顺序控制--基于普中51单片机模拟
  6. 力扣739:每日温度 medium 20220329
  7. 微信小程序运营系列(九)——一个传统行业“大老粗”怎么玩微信群
  8. opencv3编程入门毛星云(第三章3.18-3.21)
  9. 【已解决】检索 COM 类工厂中 CLSID 为 {28E68F9A-8D75-11D1-8DC3-3C302A000000} 的组件失败,原因是出现以下错误: 80040154 没有注册类
  10. Android 小程序APP成语字典课程设计