技术选型需要结合多方面来考虑,这里我试着列举一些方面,仅供参考。

是否需要兼容多种数据库。如果需要兼容,优先考虑spring data jpa。因为mybatis想要兼容数据库需要写多套sql脚本,工作量很大。

开发团队的经验。开发团队成员过往开发中,对哪个orm框架更熟悉。一般来说,mybatis上手比较容易,jpa/hibernate虽然不用写sql语句,但是配置复杂,各个状态转换难以理解,出现错误也难以调试,对开发人员能力要求较高。

性能考虑。作为orm框架,jpa/hibernate需要把数据库行完全映射成java对象,占用内存较大,特别是进行关键查询的情况下。当然,这可以通过懒加载、查询指定字段等方式优化,但是和上面一样,对人员要求较高。另外hibernate生成的sql语句可读性也较差,不利于检查问题。

其他杂项考虑。jpa对逻辑删除支持较差; mybatis编写ResultMap过于繁琐等等。

总结一下,spring data jpa开发效率高,代码量少,但是代价是学习成本和优化成本比较高。mybatis代码量大一些,不好兼容多种数据库,但是手动编写sql相对灵活,上手简单。