我无法明确的告诉你JPA和MyBatis在国内哪个会更流行,我本人更喜欢JPA,但是我本人日常开发用MyBatis多 。
但是我的回答绝对不是在划水,而是我多年来自己的一点小小的思考 。MyBatis用好了就是神!用不好就特么一坨……并且,这个框架只有两个结果,要么就是用的好,要么就是用不好……
而JPA,用不好,比MyBatis还一坨……但是用好了,那是超越神的存在,因为你已经完全脱离了事务脚本 。
有没有更牛逼的?
有,但是现实中你基本遇不到这样的大神,因为这样的大神在成为大神之前,要么早就财务自由了,要么就转管理了 。
国内大多数项目其实根本没有设计过程,都是想到哪儿写到哪儿,别说领域模型的设计了,就连OOP都没有,都是披着OOP的外壳在写过程 。
当然这是大环境所逼迫的,并不是程序员、架构师所能左右的,大环境就很浮躁,就认为一个月能开发出一个支付宝,你没办法去抗衡它,大家都要吃饭的嘛,我为什么要打击别人的梦想呢?只要您给钱,我就尽量满足您 。
我(曾经)非常愤恨这种劣币驱逐良币的环境,本来大家都是安心做设计,然后水到渠成的进行开发,客户也是和和气气的跟开发进行商讨,结果有些人念歪了敏捷的经,更有甚者,读了一本《人人都是产品经理》就真的认为自己是个非常牛逼的产品经理了 。
都特么一群....
千万不要自信的认为,前三十年的懒惰,通过一两本书就能解决自己知识的匮乏 。
结果就是导致现在大家都不喜欢静下心来搞设计,而是喜欢不管三七十二一先冲山头再说,稍微有点前瞻性的考虑都认为你是过度设计 。
- 你跟他说制定作战计划 。
- 毛的的作战计划,全都给我上,见招拆招,逢人便打就对了 。
但是如果重心放在设计上,那么自然JPA在OOP上比MyBatis优秀太多太多了 。
封装、继承、多态抽象、接口、实现一说到OOP,大家都信手拈来,甚至什么贫血模型、充血模型、胀血模型都跟你说的头头是道,但是一涉及到实际开发全都抛到脑后去了 。
仔细想想,有多久没有写类似下面这种代码了?(随便写着玩的,Lombok仅为减少代码行数)
@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)@Table(name="uaa_account")@Entitypublic class Account {/* 状态 */@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String username;private String password;/* 构造 */private AccountRepository accountRepository;public Account(AccountRepository accountRepository) {this.accountRepository = accountRepository;}/* 行为 */public void login(LoginCommand command) {}public void register(RegisterCommand command){}/* 事件驱动 */@PostPersistpublic void emmitEvent() {}}
再说一个让很多开发感到恐惧的事情:public abstract class AbstractDomAIn {@Getterprotected final String attr;public AbstractDomain(String attr) {this.attr = attr;}}
试问一下,你有多久没有写抽象类和受保护的状态了?final 这个关键字,如果没有Sonar,大家是不是快把它给忘记了?只读属性究竟意味着什么还记得吗?
Collections.unmodifiableList() 不可变集合到底用来干嘛的?我估计90%的开发都没用过这个玩意儿吧?
文章插图
约书亚·布洛克(英语:Joshua J. Bloch,1961年8月28日-),美国著名程序员 。他为JAVA平台设计并实作了许多的功能,曾担任google的首席Java架构师(Chief Java Architect) 。大神的代码随处可见,你离大神就是那么的近 。
2001年出版Effective Java,获得2001年Jolt奖 。詹姆斯·高斯林曾表示相当赞赏此书 。
- SOLID五大原则,你是否已经忘记的一干二净了?
- 你的代码是否只有分层,而没有模式?
- 23种设计模式,随口能说五六个,但是这五六个都用来解决什么问题的,有没有仔细思考过?
现在大家的重心都是怎么快速的冲锋,前面三个山头,也不给你一个具体的目标,反正你给我冲,冲到哪里咱不管,起码你冲了 。
推荐阅读
- Springboot默认的错误页是如何工作及工作原理你肯定不知道?
- SpringBoot通过一个注解结合Redis实现接口限流就是这么简单
- Oracle Database 19c在Linux系统上面的安装部署
- Springboot2 什么才是真正的架构设计?
- RabbitMQ与Spring集成:构建强大的企业级应用
- 虚拟线程在SpringBoot中的应用
- SpringBoot使用WebSocket实现即时消息
- SpringBoot整合WebSocket详解
- 28个SpringBoot项目中常用注解,日常开发、求职面试不再懵圈
- Java Spring框架下的MySQL数据访问最佳实践