不知道大家在整合SpringBoot+MyBatis有没有想过, 为什么SpringBoot不提供MyBatis的官方Starter呢?(可以查看SpringBoot官方提供的所有Starter并没有MyBatis的)你以为是为了和SpringDataJPA竞争?不不不~~

首先JPA(Java Persistence API )是JDK钦点的ORM规范,由Java官方提供出来的对象持久化的一套规范!!

那SpringBoot要做ORM框架肯定跟着JDK玩,毕竟JDK才是整个java的标准,所以才诞生SpringDataJpa. SpringDataJpa 的持久化操作实现默认用的依然是Hibernate.在Hibernate基础上构建了更多模板类以及易用性的改善。

Hibernate才是正统的JPA血脉!MyBatis?根本算不上ORM框架,不过是一个封装了JDBC的持久化框架(根本没有严格遵循对象持久化规范——即JPA规范)!SpringBoot我都不愿意跟你玩,你对标的应该是我的JDBCTemplate——都是直接操作sql,我Spring都有一个封装了JDBC的组件(JDBCTemplate)干嘛还跟你玩,你要跟我玩自己写Starter来适配我! 这才是真正的原因!

屏幕前的你

我知道你看完还是无法打动你,我们来比较一下Hibernate VS MyBatis:


Hibernate VS MyBatis

Hibernate 是一个对象关系映射框架 (ORM),它将 Java 类映射到数据库表。

MyBatis 是一个持久化框架——不是 ORM。它将 SQL 语句映射到 Java 方法。

为什么国人更偏爱MyBatis

总结原因:

1.你连JPA、Hibernate、ORM 都搞不清楚,还咋用Hibernate?Hibernate学习和使用门槛比MyBatis高

2.MyBatis简单易学上手快—符合培训机构的教学标准。培训机构都教MyBatis能不流行嘛!

3.中国特色的业务需求更复杂,使用MyBatis实现简单快捷。Hibernate要实复杂需求现难度更大!

4.为了无条件实现领导的需求,催生更加复杂的业务。需要面向领导编程,不得不选择更灵活的MyBatis。
5. 随着SSH的落幕,SSM的带动下。时代变迁\技术变更\大众选择

ps:那说来说去感觉还是应该MyBatis更好用啊..Hibernate还是被时代被社会环境抛弃了啊..虽然它确实有用又能怎么样呢?

但是

hibernate在实现一些需求单一的应用还是有它的优势的:相较传统的Mybatis来说,持久层代码码少了60%,当然大部分都是体现在xml文件上,你无需花精力去维护你SQL语句,大大简化了持久层的开发、提升了开发效率。所以他们可以用于不同场景:


不同使用场景

Hibernate用于

  • 常规 CRUD功能、偏简单的业务需求 。
  • 编程方式由对象模型驱动—CodeFisrt。
  • 有更换数据库的需求。

MyBatis 用于

  • 编程方式由数据库驱动—DBFisrt。
  • 对SQL语句有极致的优化需求。
  • 对复杂的搜索查询,动态条件查询支持更舒服。

哦~~看样子他们各有各的好处,难不成我Hibernate和MyBatis混用?确实有很多应用这么干,但是我不建议在一个应用中混用,增加了应用架构的复杂度,但是如果一个应用可以拆成互不相干的小应用呢?各自小应用可以根据自己的业务复杂度选择自己所需的技术呢?


所以迎来Hibernate的又一春来了—— 微服务下结合SpringDataJpa

微服务架构下的关键就是:“拆!”,代码和数据库都会随之拆分,单个服务的业务复杂度也就降低了,随之SQL复杂度也就降低了,并且我每个服务可以自由选择自己的技术互不干涉,SpringDataJpa的用武之地毋庸置疑啊!

使用SpringDataJPA

SpringBoot下使用SpringDataJPA不要太方便:

  1. 只需加入对应springdatajpa依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

2.添加Repository接口

结合dao层的Repository内置接口即可快速的CRUD,多种持久化方式供你自由选择,以下示例中7种:

public interface CustomerRepository extends
PagingAndSortingRepository<Customer,Long>   //1.实现分页排序和CRUD// 需要实现动态条件也有很多内置接口可选择
, QueryByExampleExecutor<Customer>                  // 2.实现动态条件:快速精确匹配(查)
, JpaSpecificationExecutor<Customer>              // 3.实现动态条件:Specification(查)
, QuerydslPredicateExecutor<Customer>           // 4.实现动态条件:Querydsl(查)
{// 5.还可以根据规定方法名进行快速定制持久化操作(查删)List<Customer> findByCustName(String custName);   // 即可生成SELECT * FROM Customer WHERE custName=?// 如果你想自定义语句查询,依然提供:// 6.通过JPQL进行持久化操作(增删改查)@Query("FROM Customer where custName=:custName ")List<Customer> findCustomerByCustName(@Param("custName") String custName);// 7.通过原生SQL进行持久化操作(增删改查)@Query(value="select * FROM tb_customer where cust_name=:custName ",nativeQuery = true)List<Customer> findCustomerByCustNameBySql(@Param("custName") String custName);}

第5种更多规定方法名对照表:

使用:

直接调用持久化方法即可、无需依赖任何代码生成器

@Autowired
CustomerRepository repository;// 1.PagingAndSortingRepository
repository.findById(20L);
// 5.规定方法名
repository.findByCustName("图灵");// 4.通过QueryDSL可以进行复杂查询: 是不是跟SQL很像:
JPAQuery<Tuple> tupleJPAQuery = factory.select(customer.custId, customer.custName).from(customer).where(customer.custId.eq(1L)).orderBy(customer.custId.desc());// ...更多方式可以学习springdatajpa课程

总结和展望

SpringDataJPA使用起来的感受就是一个字 “” ,它能快速的搭建起一个持久层,也不用像Mybatis一样太多的关心SQL。

其实在互联网项目中涉及到实时直接操作数据的场景会越来越少, 大多数都会通过缓存或其他NoSql存储(ES、MongoDB)、定时任务、MQ等技术 来为数据库减压。所以我觉得以后数据库的运用就应该是简单直接的。

所以推荐简单业务的应用和微服务架构下都可以采用SpringDataJpa,而MyBatis的则为实现那些复杂的ERP\OA等各种系统、为了应付领导各种复杂的需求才有它的用武之地。

Hibernate淘汰了?只是你不会用而已相关推荐

  1. 2019年记录:java小白级程序员工作一年以来的经历,遇到的坎坷以及当时的心态

    工作一年后的感想 首先说一下在入职前我对java纯血统的知识以及Spring,Mybatis,struts2.Hibernate的理解(上面的WEB框架应该不属于java纯血统的东西,当然EJB算,但 ...

  2. 经过半个月的深入发现CRM-SSM项目如此简单

    ​ ​ 活动地址:CSDN21天学习挑战赛 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩:迟一天就多一天平庸的困扰.各位小伙伴,如果您: 想系统/深入学习某技术知识点- 一个人摸索学习很难坚持 ...

  3. java面试常见问题之Hibernate总结

    1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象.) Ø  OID检索(按照对象的OID来检索对象.) Ø  HQL检索(使用面向对象的HQL查询语言.) ...

  4. 数据持久化框架为什么放弃Hibernate、JPA、Mybatis,最终选择JDBCTemplate!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 因为项目需要选择数据持久化框架,看了一下主要几个流行的和不流行的框 ...

  5. Java 的 JSP 已经被淘汰了吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://rrd.me/egNqd 以前的项目大多数都是 ...

  6. 被公司圈养的年轻人,如何避免被市场淘汰?

    作者 | 安晓辉 来源 | 安晓辉生涯(ID:programmer_sight) 有位程序员K找我做咨询,说他在电力行业的一家软件公司做了八年后端开发,用到的各种技术,JSP,Struts,Hiber ...

  7. 盘点 6 个被淘汰的 Java 技术,它们都曾经风光过!| CSDN 博文精选

    作者 | 栈长 责编 | 屠敏 出品 | CSDN 博客 今天给大家分享下我的开发历程中,我知道的那些被淘汰的技术或者框架,有些我甚至都没有用过,但我知道它曾经风光过. 废话不多说,下面我要开始吹了- ...

  8. struts+spring+hibernate总结

    简单的说: struts 控制用的 hibernate 操作数据库的 spring 用解耦的 详细的说: struts 在 ssh 框架中起控制的作用 , 其核心是 Controller, 即 Act ...

  9. Hibernate简答题

    简单题目 1.持久化对象的三种状态,代表含义. 自由状态(transient): 不曾进行持久化,未与任何Session相关联 持久化状态(persistent): 仅与一个Session相关联 游离 ...

最新文章

  1. 3.4 matlab用for语句实现循环结构
  2. alexnet 论文翻译
  3. ptyhon中文本挖掘精简版
  4. [笔记]Linux NTP命令 (ESX适用)
  5. 南阳14(会场安排问题)
  6. Spark基础学习笔记20:RDD持久化、存储级别与缓存
  7. SOLID,GRASP和面向对象设计的其他基本原理
  8. python 进行后端分页详细代码
  9. 说你呢,装着JDK8,却孜孜不倦的写着 JDK6 的代码,写了3年了,JDK8的特性都没用过......
  10. 大数据高级开发工程师——大数据相关工具之三 Maxwell
  11. 色彩校正中的Gamma(人眼亮度感应的非线性)
  12. 群晖 winscp php,WinSCP自动执行脚本
  13. 相忘江湖不如相濡以沫(II)
  14. 大学计算机一级b类和c类有何区别,申论(C类)和A类,B类有什么区别吗
  15. java高级后端研发工程师JD,京东资深后端JAVA研发工程师工资待遇怎么样 - JD京东商城 - 职友集...
  16. 关于如何解决360篡改edge等浏览器主页的解决方案
  17. 使用压缩软件将exe和dll文件打包成一个exe启动文件
  18. 爬虫小案例之爬取京东商品链接
  19. Postman的使用教程笔记
  20. python 后端web框架知识整理

热门文章

  1. 如何部署WeaveScope
  2. 阿狸的童话,我的梦:伤感日志分享
  3. 【GoDance搜索引擎】搜索引擎集群模块实现笔记
  4. linux tomcat7 启动服务报 PermGen space
  5. InvocationTargetException
  6. Android 动态权限申请过程
  7. java long常量池_Java-常量池
  8. Structure-Preserving Super Resolution with Gradient Guidance 译文SPSR
  9. 架构面试精讲第三节 分布式技术RPC、MQ、Redis、Mysql、restful详解
  10. SAP中QM采购收货消息实测