mybatis相对于ibatis的优势
来源:互联网 发布:高频关键词共现矩阵 编辑:程序博客网 时间:2024/05/29 21:28
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。
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的优势
- 线程相对于进程的优势
- epoll 相对于select的优势
- epoll 相对于select的优势
- Linux相对于VxWorks的优势
- Hbase相对于Mysql的优势
- Spark相对于MapReduce的优势
- 延云YDB相对于Mdrill的优势
- Hibernate相对于Mybatis的缺陷
- 条件随机场(CRF)相对于HMM,MEMM的优势
- C#脚本实践(六): 脚本相对于C++的优势
- 多进程编程 相对于 多线程编程的优势
- 组播相对于单播和广播的优势
- 小程序相对于传统推广的优势所在
- spring注解配置相对于传统xml配置的优势
- mybatis相比Hibernate的优势
- Hibernate和Mybatis的优势
- java中的垃圾收集器相对于以前的语言的优势
- django学习11 静态文件
- 0513
- CSDN日报20170513 ——《腾讯2017校招实习生面试总结》
- 数据可视化七条原则
- 关于js中call方法的理解
- mybatis相对于ibatis的优势
- 利用react-redux实现react组件数据之间数据共享
- Fragment+RadioButton实现点击切换页面效果
- Python学习之文件(一)
- CentOS7上elasticsearch5.0 常见问题
- 使用java 访问发送http协议, 发送Get请求跟Post请求
- Hibernate_Hibernate映射与查询练习题
- 求N个整数的平均值(注意N可能很大,N个数直接相加会造成整数溢出)
- 汇编入门基础与helloworld