Springdata JPA、MyBatis选型

  1. 概述
    JPA是Java Persistence API的简称,中文名Java持久层API,描述对象-关系表的映射关系,本身是一种ORM规范,不是ORM框架.由各大ORM框架提供实现,Springdata JPA基于Hibernate来实现;而mybatis着力于POJO与SQL之间的映射关系。详见ORM框架与JPA规范
  2. 性能
    ​ 由于 Hibernate 比 MyBatis 抽象封装的程度更高,理论上单个语句之心的性能会低一点(所有的框架都是一样,排除算法上的差异,越是底层,执行效率越高)。 但 Hibernate 会设置缓存,对于重复查询有一定的优化。所以,从整体的角度来看性能的话,其实两者不能完全说谁胜谁劣。
  3. 与 Spring 的集成
    MyBatis本是apache的一个开源项目iBatis;Spring 以及 Spring Boot 对 Hibernate 的集成一直是有的。但是MyBatis 官方社区自身也是有 对 Spring / Spring boot 集成做支持的,所以在技术上,两者都不存在问题。
  4. 编码难度
    Hibernate是一个完整的ORM框架,常规CRUD我们不需要写一句SQL,由于Hibernate封装了完整的对象关系映射机制,以至于内部的实现比较复杂、庞大,学习周期较长。但是配置简单,开发人员将更多的经历放到业务逻辑上;MyBatis 并不是一个完整的ORM框架,因为我们还需要自己去写全部SQL,Mybatis 主要依赖于SQL的编写与ResultMap的映射,前期配置有点略坑(个人眼瞎),好处是可以进行更细致的SQL优化,查询必要的字段,比较考验sql能力。
  5. 开发速度
    Springdata JPA,开发速度快,搞cqrs什么的也方便,对于对开发速度有要求的项目,非常不错。不要迷信换框架,或者换数据库类型,基本上没这个操作,去IOE也就是大公司有那么一两次机会。大家对数据库的依赖程度高到骨头里,轻易不会换的。jpa+hibernate其实也能原生sql,就算是复杂点的sql,hibernate自己也能处理。大家觉得之前用hibernate不爽的可能是hql的不透明,导致不好去针对性优化,对于简单业务其实问题也不大。现在特别提倡全栈、devops,对于一杆子通到底的系统开发,Springdata JPA是利器。同时hibernate封装了一些dialect的最佳实践,简单的分页之类,可以限制新手写错了,提高了效率。。。总之越简单越小白的系统,越推荐。
  6. sql的规范管理
    MyBatis,有一定规模的大的系统、数据量很大、并发也大的,对性能有很高要求的,这类系统很少,但是比较推荐用MyBatis,大家说的性能其实是次要的,主要是规范管理+方便调优。MyBatis是针对DBA友好的,可能很多人意识不到,大公司的开发人员写的SQL是不能直接上线的,一定需要经过DBA去review,这样一个项目把这次修改的所有代码提交,代码的diff自动通过工具提交到了资源开发或架构师那边去review,而mapper文件里的这些SQL的变动会到DBA这边来review,这是非常关键的。开发人员可能并不清楚改动的SQL会对线上造成什么影响,也没有机会让开发人员去线上试验。而DBA可以给出意见,或者修订这些提交的SQL,甚至让开发人员修改或拆分SQL,比如加上一些hint,这个操作用jpa貌似就不好办了(高度封装的hql不透明)。
  7. 移植性
    Springdata JPA移植性比较好,不用关心用什么数据库,因为Mybatis 自由写sql语句,所以当项目迁移的时候还需要改sql。
  8. 迭代能力
    当需要修改表字段的时候,JPA相对Mybatis 简单很多。

总结:仁者见仁,智者见智,自己衡量吧
反正我是选择Springdata JPA,可以把更多的经历放到面向对象编程上,不需要分太多经历放到数据库相关操作上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值