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. 绘制简单的正太分布图
  3. Ubuntu Linux 安装后,建立嵌入式开发环境
  4. 解决placeholder兼容性问题
  5. 使用Spring Boot 2使用OAuth2和不透明令牌进行集中授权
  6. 英文版Ubuntu 安装中文输入法
  7. 英国PHP轴承,php – 纵向宽度将如何影响轴承
  8. 2017年度工作总结
  9. visio 2019 简单流程图教程
  10. Centos6 安装可视化界面
  11. 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F Trig Function(切比雪夫多项式)
  12. 文件上传插件WebUploader的使用
  13. 阿里云acp报名了可以退吗?阿里云acp认证所需具备的知识
  14. htc+one+m8+联通+android+5,HTC One M9和HTC M8哪个好
  15. Unix / Linux 线程的实质
  16. 谢宁方法或谢宁DOE
  17. 富士康java面试题
  18. 玩一回没有“蒋氏”的溪口
  19. 鸿蒙时期有厉害的人吗,急求:中国神话中有几位圣人.都是谁。鸿钧.鸿蒙.陆压.东皇太一的来历。天界掌控者一共更换了几代都是谁...
  20. 视频教程-2020年软考信息安全工程师_基础知识精讲软考视频培训课程-软考

热门文章

  1. 数据结构---树的性质
  2. 概率论基础 —— 10. 切比雪夫不等式、大数定理、中心极限定理
  3. Android-开发之从掉洞到填坑之路面试必备
  4. c语言为什么除法会四舍五入,C语言学习(2)
  5. 解析XML的几种方式的原理与特点:DOM、SAX、JDOM、DOM4J
  6. 使用容斥原理求1000以内素数个数
  7. unity LineRender用法——画线
  8. 月薪过万的UI设计师有哪些能力
  9. 第 20、21、22节 事件详解
  10. java后台之极光推送开发案例(jpush)