我觉得为啥这么多人都说Mybatis好,原因最主要是Mybatis容易上手,现在学编程学数据库基本都学过SQL,Mybatis面向DB基于SQL的模式相对来说就显得特别直观友好。
而JPA是基于ORM的,把代码和DB分离,相当于在代码和DB之间增加了一个新的层面,一套新的标准,去间接操作DB,相对SQL的模式来说就显得不够直接和易于控制,增加了学习成本,碰到这样那样问题的时候,很容易让人放弃。
特别是在团队开发的时候,你很难掌控每个人对JPA的深层机制的理解程度,为了避免木桶效应,还不如干脆都用Mybatis。其实这两者就功能的角度来说,肯定是相互学习借鉴的,Spring Data JPA也可以执行原生SQL,存储过程,Mybatis也有一部分ORM特性,选择Spring Data JPA还是选择Mybatis都不会影响到最终业务逻辑的实现。不影响业务实现的前提下,选型主要就是选择开发和维护时的效率了。
这方面的话我觉得在开发阶段频繁修改表结构时Mybatis不如Spring Data JPA或者说Hibernate的正向工程方便快捷,再考虑和spring全家桶的版本兼容性,我们团队最终选了Spring Data JPA。
我们团队早期一些项目使用的是 MyBatis,后续所有项目都换用 Spring Data JPA 了。因为在早期使用 Spring Data JPA 时,就解决掉了它最大的痛点,也就是大家经常说的不能应对复杂业务场景、不便于写复杂动态 SQL 的问题。
我写了一个 Spring Data JPA 扩展库