集团主站
欢迎来到成都达内官方网站!达内—美国上市公司 亿元级外企IT培训企业!
成都it培训哪家好
成都it培训哪家好
全国服务监督电话:400-111-8989  |   联系客服   |
当前位置:主页 > 培训课程 > Java >

成都java程序员为什么不想再用JPA了?

发布者: 成都达内     浏览次数:     发布时间:2019-09-17 10:34:36

在开发者的圈子里,没当说到一种技术好或者不好,都会引发激烈或者不激烈的争论,成都java程序员今天说JPA的问题不是想引发什么讨论或者骂战,单纯的就是不喜欢JPA。没错,就是这...

  在开发者的圈子里,没当说到一种技术好或者不好,都会引发激烈或者不激烈的争论,直到一个开发者出来说PHP是世界上最好的语言,大家伙儿才会纷纷退去继续写代码。

  成都java程序员今天说JPA的问题不是想引发什么讨论或者骂战,单纯的就是不喜欢JPA。没错,就是这么 Real。

  说到Java开发,涉及到数据库访问的,主要就两种框架,一个是MyBatis,另一个就是JPA。据说是国外JPA用的比较多,国内MyBatis用的比较多。国内为什么MyBatis用的多呢,传说是因为整个阿里系都用它。

  JPA全称是Java持久化API,它的目的就是帮助我们提高开发效率,它的核心是Java持久化查询语言(JPQL),对存储在关系数据库中的实体进行查询。在语法上类似于SQL查询,但是操作的是实体对象而不是直接对数据库表进行操作。(摘自 wiki)

  成都java程序员为什么不想再用JPA了?

  使用 JPA 开发的流程如下:

  1、将数据库表映射到项目实体中

  2、生成对应的 Repository

  3、实现 Service ,Service 中调用 Repository

  JPA帮你省事儿的地方就在Repository里,对于那些比较简单的逻辑,比如单表查询,直接根据名字就可以实现查询逻辑。对于大部分查询来说,真的很省事儿。但刚开始用的时候,确实感觉有些莫名其妙。

  确实如此,如果你用过JPA,有些时候它确实对开发效率有很大提升,JPA想要做的就是尽量让你少写sql,甚至不写sql。基于这种思想,JPA实现了它自己的一套语法、注解规则。

  JPA要用各种注解配合来实现数据实体间的一对多、多对多等等的关联关系。正因为这样,我觉得实体变得不单纯是实体,而是掺杂的逻辑在里面,也增加了实体的复杂度,对于比较复杂的业务来说,很容易造成实体间直接或间接的循环引用。

  你如果想用 JPA,除了要掌握各种注解外,对于稍微复杂的查询,还要掌握它的那套写法,比如下面这种代码:

  Specification specification = (root, criteriaQuery, criteriaBuilder) -> {

  Predicate p = criteriaBuilder.equal(root.get("deleted").as(Boolean.class), false);

  Predicate news = criteriaBuilder.equal(root.get("cntntType"), ContentType.CNTNTTP_NEWS.name());

  Predicate salon = criteriaBuilder.equal(root.get("cntntType"), ContentType.CNTNTTP_SALON.name());

  Predicate type = criteriaBuilder.or(news, salon);

  ...

  而且你想要实现一个join查询也是够费劲的,除了要写上面那套代码外,还要在实体上做手脚,想到就想哭,有没有。难道直接写个sql不好吗,为什么要这么糟蹋自己。

  还有一点,JPA有些注解用上了之后会影响到数据库层面,比方说关键外键的注解,如果你用默认设置,这个外键就真的会应用到数据库表里,在表上建外键。还有其他的一些ORM框架也是如此,这是我完全不能接受的,凭什么,凭什么在我的数据库上改东西。

  愿我参与的项目中没有JPA。公司有个项目用到了JPA,我也参与了一部分,写的代码不算多,除了令我头疼之外,没有体会到JPA的半点好处,这其中当然很可能是由于我的水平有限,或者说我写的JPA代码不够多,或者我根本没有领会到JPA的精髓所在。总之不管怎么样,对不起,愿我不会再碰到JPA。

  成都java程序员为什么不想再用JPA了?

  当然这么说肯定是有失偏颇,有些同学可能会对此嗤之以鼻。没错,有同事就是这样说的:事物存在即合理,JPA这么多年了,如果不好用怎么会还有这么多人用,而且国外JPA使用者众多,难道人家都有问题。

  如果只是简单的项目,业务一点也不复杂,不复杂到连个join 都没有的项目,可以用JPA ,其他的情况下,真的不用它最好。用JPA的感觉就像是被绑上了手脚,失去了自由。不自由,毋宁死。纵使千般好,少了自由,成都java程序员就拒绝它。而MyBatis 恰恰就是给开发者自由的一个框架。

(责任编辑:范老师)
最新开班
  • 成都Java培训班
    免费试听名额发放中...
  • 成都C++培训班
    免费试听名额发放中...
  • 成都PHP培训班
    免费试听名额发放中...
  • 成都网络工程培训班
    免费试听名额发放中...
  • 成都Unity3D培训班
    免费试听名额发放中...
  • 成都大数据培训班
    免费试听名额发放中...
  • 成都uid培训班
    免费试听名额发放中...
  • 成都会计培训班
    免费试听名额发放中...
  • 成都Python培训班
    免费试听名额发放中...
  • 成都嵌入式培训班
    免费试听名额发放中...
  • 成都web培训班
    免费试听名额发放中...
  • 成都软件测试培训班
    免费试听名额发放中...
在线留言
提交

校区地址:成都市锦江区东大街紫东楼端35号明宇金融广场19楼1906室

联系电话:400-111-8989

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市高新区奥克斯广场蜀锦路209号一楼商铺

联系电话:400-111-8989

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都锦江区东大街芷泉街229号东方广场C座3楼303

联系电话:400-111-8989

公交路线:芷泉街(188路;115路;515路;236路;505路;501路;84路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市武侯区佳灵路3号红牌楼广场2号写字楼11楼1115号

联系电话:400-111-8989

公交路线:红牌楼东(11路;92路;100路;111路;139路;g28路;快速公交K1/K2) 地铁路线:红牌楼站(地铁3号线)

校区地址:成都市锦江区红星路二段70号四川日报大厦502-2

联系电话:400-111-8989

公交路线:市二医院站(6路;49路;102路;5路;37路;g92路;) 地铁路线:地铁市二医院(地铁3号线)

校区地址:成都市锦江区东大街芷泉段229号东方广场C座16层

联系电话:400-111-8989

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:四川省成都市武侯区高新科技孵化园9号园区E座7楼

联系电话:400-111-8989

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

了解达内动态
关注成都达内教育公众号

首页 | 关于达内 | 课程中心 | 专家师资 | 视频教程 | 学员空间 | 校企合作 | 新闻资讯 | 就业指导 | 网站地图

2016-2025 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56 蜀ICP备18021046号-3