摘要:要是紧急排查个问题,妈蛋虽然有很多好处,比如和底层的无关。你的公司如果有,是不允许你乱用的。
知乎看到问题《SpringBoot开发使用Mybatis还是Spring Data JPA??》,顺手一答,讨论激烈。我实在搞不懂spring data jpa为啥选了hibernate作为它的实现,是“Gavin King”的裙带关系么?
DAO层搞来搞去,从jdbc到hibernate,从toplink到jdo,到现在MyBatis胜出,是有原因的。
目前,一些狗屁培训公司,还有一些网络课程,包括一些洋课程,为了做项目简单,很多会使用jpa。但到了公司发现根本就不是这样,这就是理论和现实的区别。
顶着被骂的风险,我整理发出来。这可不是争论php好还是java好性质了。
忠告:精力有限,一定要先学MyBatis啊。jpa那一套,表面简单而已。
如果你经历过多个公司的产品迭代,尤其是复杂项目,你就会发现Spring Data JPA这种东西是多么的不讨好。说实话,Mybatis的功能有时候都嫌多,有些纯粹是画蛇添足。
jpa虽然是规范,但和hibernate这种ORM是长得比较像的(不说一些特殊场景的用法)。
Spring Data JPA 是个玩具,只适合一些简单的映射关系。也不得不提一下被人吹捧的querydsl,感觉有些自作聪明的讨巧。实在不想为了一个简单的DAO层,要学一些费力不讨好的东西。
Listpersons = queryFactory.selectFrom(person) .where(person.children.size().eq( JPAExpressions.select(parent.children.size().max()) .from(parent))) .fetch();
看看上面的查询语句,完全不如普通SQL表达的清晰。要是紧急排查个问题,妈蛋...
jpa虽然有很多好处,比如和底层的SQL无关。但我觉得Spring Data JPA有以下坏处:
1、 屏蔽了SQL的优雅,发明了一种自己的查询方式。这种查询方式并不能够覆盖所有的SQL场景。
2、 增加了代码的复杂度,需要花更多的时间来理解DAO
3、DAO操作变的特别的分散,分散到多个java文件中,或者注解中(虽然也支持XML)。如果进行一些扫描,或者优化,重构成本大
4、不支持复杂的SQL,DBA流程不好切入
Mybatis虽然也有一些问题,但你更像是在写确切的SQL。它比Spring Data JPA更加轻量级。
你只要在其他地方调试好了SQL,只需要写到配置文件里,起个名字就可以用了,少了很多烧脑的转换过程。
Mybatis完全能够应对工业级的复杂SQL,甚至存储过程(不推荐)。个人认为Mybatis依然是搞复杂了,它其中还加了一些类似if else的编程语言特性。
你的公司如果有DBA,是不允许你乱用SQL的。用Mybatis更能切入到公司的流程上。
所以我认为:玩具项目或者快速开发,使用Spring Boot JPA。反之,Mybatis是首选。
一些有用的评论你说的if else是指的SQL拼接吧,这可是MyBatis的重要功能之一,学起来一点儿也不复杂好吗?
最近也在研究持久层,可以充分利用这个jpa这个玩具,两者结合是不错的选择,jpa基本的单表操作,mybatis做复杂查询,开发效率高,降低sql维护成本,也为优化留下空间,当然这需要对spring-data-jpa做一些扩展
查询直接sql,其他的还是orm方便
mybatis主要是原生sql,对于其他没学习过jpa的开发人员而言降低了学习维护门槛,而且说真的jpa写了个锅你去追其实还是挺头疼的...
mybatis-plus整合之后基本curd不用纠结了,很多对对象操作然后直接save就好。复杂场景、联表就直接用原生sql就好,至于性能问题可以用sqlAdvice优化下。
jdbc template+代码生成器,更简单更高效
jpa这玩意,写一个简单的数据库操作,就比如说单表的操作,很好用。如果是多表,那就算了吧
spring boot 推荐jpa,知道为什么吗
native=true 想用原生查询也没人拦着你啊
你好像不是很懂hibernate和jpa…
不知道你是否清楚 jpa,hibernate,spring data jpa,还有querydsl 之间的关系。
总有一天你会知道数据库优先和程序优先的区别
jpa还有一个好处,那就是帅锅啊
END来,越年轻越狂妄的家伙们,来喷我啊。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/74763.html
摘要:一从零搭建环境本次我使用的是编辑器来搭建和环境首先,我们在新建项目的时候,选择,然后就行了。可以看出,本次的版本为。这是一个非常好用的插件,有了它我们可以不用写繁琐的方法。非常适合我们做一些简答的测试和小功能。 前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 不知道大家对SpringB...
摘要:而本身也是基于的实现。有点类似于实现类和接口的关系。而是在两者的肩膀上更近一步,提供了更加方便的操作。顺带一说,与两者不同,它不基于协议,而是直接通过操作语句来操作数据库。 人生苦短,我用 SDJ! Spring Data JPA(SDJ)在我看来,相比于 MyBatis 和 Hibernate 最大的好处就在于,它太方便了!如果你的业务逻辑并不需要控制细腻度很高的情况下(SDJ 在我...
摘要:我将举几个栗子,来详细的说一下我自己在使用多表复杂查询的场景和想法。名字手机号这是一个单表的多条件复杂查询,由于是在几个属性中进行筛选,其中的属性的个数不知道有多少个,所以只需要利用查询就可以很方便的实现这个需求。 最近工作中由于要求只能用hibernate+jpa 与数据库进行交互,在简单查询中,jpa继承CrudRepository接口 ,然后利用jpa的方法命名规范进行jpql查...
摘要:不管是还是,表之间的连接查询,被映射为实体类之间的关联关系,这样,如果两个实体类之间没有实现关联关系,你就不能把两个实体或者表起来查询。 因为项目需要选择数据持久化框架,看了一下主要几个流行的和不流行的框架,对于复杂业务系统,最终的结论是,JOOQ是总体上最好的,可惜不是完全免费,最终选择JDBC Template。 Hibernate和Mybatis是使用最多的两个主流框架,而JOO...
摘要:所以悲观锁是限制其他线程,而乐观锁是限制自己,虽然他的名字有锁,但是实际上不算上锁,只是在最后操作的时候再判断具体怎么操作。悲观锁和乐观锁比较悲观锁适合写多读少的场景。 最近在公司的业务上遇到了并发的问题,并且还是很常见的并发问题,算是低级的失误了。由于公司业务相对比较复杂且不适合公开,在此用一个很常见的业务来还原一下场景,同时介绍悲观锁和乐观锁是如何解决这类并发问题的。 公司业务就是...
阅读 975·2021-11-23 09:51
阅读 2290·2021-10-08 10:22
阅读 2467·2021-09-29 09:35
阅读 824·2021-09-22 15:20
阅读 2827·2019-08-30 15:53
阅读 2385·2019-08-30 13:55
阅读 1055·2019-08-29 17:27
阅读 2838·2019-08-29 17:26