mybatis相对于ibatis的优势
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的优势相关推荐
- XML具有哪些特点?相对于HTML的优势
xml具有哪些特点?相对于html的优势? 1什么是html html被称为超文本标记语言, 是一种描述性语言,用html 可以创建能在互联网上传输的信息页,是构成网页文档的主要语言,它是由很多的标签 ...
- 详解: Spark 相对于MapReduce的优势(为什么MapReduce性能不理想)
Spark相对于MapReduce的优势 一:MapReduce存在的问题 1**. MapReduce框架局限性** 1)仅支持Map和Reduce两种操作 2)处理效率低效. a)Map中间结果写 ...
- springMVC 相对于 Structs 的优势
智者说,没有经过自己的思考和估量,就不能接受别人的东西.资料只能是一个参考,至于是否正确,还得自己去分辨 SpringMVC相对于Structs的几个优势: 1.springMVC安全性更高,stru ...
- MyBatis实战——前身iBatis、基础环境搭建和如何钓鱼
(一)前身iBatis 网上发现MyBatis书很少,因为旧项目用到的是ibatis,所以先大致过了iBatis,因为太老,所以基本上讲解的东西好少,但是还有<iBatis实战>这本书,再 ...
- SpringBoot mybatis org.apache.ibatis.io.ResolverUtil
mybatis 注解方式 2018-07-02 17:00:41.069 WARN 11564 --- [ restartedMain] org.apache.ibatis.io.Resolver ...
- RocketMQ消息存储结构分析及相对于Kafka的优势
在RocketMQ中,消息存储是由CommitLog和ConsumerQueue配合完成 消息存储结构 首先我们先来看下整体的消息存储结构 基本过程: 生产者在生产消息的时候是将消息存储在Commit ...
- Mybatis org.apache.ibatis.ognl.NoSuchPropertyException:xxx问题解决
问题描述: org.apache.ibatis.ognl.NoSuchPropertyException: com.entity.UserEntity.createDate 问题分析: 1.UserE ...
- mybatis org.apache.ibatis.ognl.ParseException: Encountered “ <IDENT> “AND ““ at line 1, column 14.
mybatis中if判断的and 要小写,大写报错的原因 <if test="(personName != null and personName!='') || (companyNa ...
- mybatis面试题及回答
1.什么是mybatis?ORM是什么?JPA是什么? 2.讲下mybatis的缓存? 1一级二级都是基于PerpetualCache的HashMap本地缓存: 2一级缓存是SQLSession级别的 ...
最新文章
- 秒赞机器人好友_空间说说秒赞机器人
- 绘制简单的正太分布图
- Ubuntu Linux 安装后,建立嵌入式开发环境
- 解决placeholder兼容性问题
- 使用Spring Boot 2使用OAuth2和不透明令牌进行集中授权
- 英文版Ubuntu 安装中文输入法
- 英国PHP轴承,php – 纵向宽度将如何影响轴承
- 2017年度工作总结
- visio 2019 简单流程图教程
- Centos6 安装可视化界面
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F Trig Function(切比雪夫多项式)
- 文件上传插件WebUploader的使用
- 阿里云acp报名了可以退吗?阿里云acp认证所需具备的知识
- htc+one+m8+联通+android+5,HTC One M9和HTC M8哪个好
- Unix / Linux 线程的实质
- 谢宁方法或谢宁DOE
- 富士康java面试题
- 玩一回没有“蒋氏”的溪口
- 鸿蒙时期有厉害的人吗,急求:中国神话中有几位圣人.都是谁。鸿钧.鸿蒙.陆压.东皇太一的来历。天界掌控者一共更换了几代都是谁...
- 视频教程-2020年软考信息安全工程师_基础知识精讲软考视频培训课程-软考