最近公司在做新项目的技术选型,ORM 框架在 JPA 和 MybatisPlus 之间进行选择。既然说道 MybatisPlus ,那么不得不提 Mybatis 。首先了解一下他们的概念:
JPA
JPA是Java EE规范中的一套ORM框架,提供了一种标准化的API,使得开发者可以更方便地进行关系型数据库的操作。JPA的实现框架如Hibernate、EclipseLink等可以快速开发企业级应用,但性能相对较低。
Mybatis
Mybatis是一种半自动化的数据访问框架,需要开发者手动编写SQL语句,但Mybatis提供了一套强大的映射机制来将SQL语句映射到Java方法上,以达到更为便捷、简洁和高效的数据访问操作。Mybatis适合对SQL语句的细粒度控制和优化。
MybatisPlus
MybatisPlus是Mybatis框架的增强工具,简化了Mybatis的开发流程,提供了更丰富的功能和更便捷的使用方式,同时还支持代码生成和自动分页等功能。MybatisPlus适合在快速开发和简化代码编写方面进行应用。
做过正儿八经开发的人都知道,项目中用的要么是JPA,要么是MybatisPlus,极少数可能用Mybatis,至于原因大家肯定也都清楚,使用 Mybatis 要写一堆的SQL,即使再简单的查询也不例外,极大影响了开发效率。
那么 JPA 和 MybatisPlus 怎么选择呢?
JPA 相比于 MybatisPlus 优点:
- 标准化API:JPA提供了一套标准化API,使得开发者可以更方便地进行关系型数据库的操作,而无需关心具体的实现细节。这样可以降低开发难度和维护成本,同时也方便应用的迁移和升级。
- 对象关系映射:JPA提供了一种对象关系映射的方式,可以将Java对象与数据库表中的记录进行关联,使得开发者可以使用面向对象的思维来操作数据库,而无需直接编写SQL语句,简化了代码的编写和维护。
- 支持事务:JPA支持声明式事务管理,可以方便地实现事务控制,确保数据的完整性和一致性。
- 级联操作:JPA支持级联操作,可以自动处理关联实体之间的操作,如级联删除、级联更新等,减少了开发者的代码量。
- 动态查询:JPA支持Criteria API和JPQL查询语言,可以根据实际需求动态生成查询语句,使得查询更为灵活和高效。
总的来说,JPA相对于MybatisPlus更加面向对象,更加标准化,提供了更多的开发便利和自动化特性,同时也降低了开发者的开发难度和维护成本。
MybatisPlus 相比于 JPA 优点:
- 灵活性:MybatisPlus需要手动编写SQL语句,可以更加灵活地进行SQL控制和优化。在实际开发中,有些复杂查询语句难以通过JPA自动生成的SQL语句进行优化,此时MybatisPlus可以更好地满足需求。
- 性能优化:MybatisPlus相对于JPA,对于大数据量、高并发的场景下,具有更好的性能优化能力,可以通过手动优化SQL语句、使用分页插件等方式来提高性能。
- 代码生成:MybatisPlus提供了代码生成工具,可以根据数据库表结构自动生成Java代码,节省了大量的开发时间和成本。
- 分页插件:MybatisPlus提供了强大的分页插件,可以方便地实现分页功能,并且可以自动识别和优化SQL语句,提高了分页的性能。
- 注解式操作:MybatisPlus支持注解式操作,使得开发者可以更加便捷地进行数据库的操作,提高了开发效率和代码可读性。
总之,MybatisPlus相对于JPA更加灵活和具有更好的性能优化能力,同时还提供了代码生成、分页插件等便利功能,适用于需要对SQL进行细粒度控制和高性能要求的场景。但是,相对于JPA,MybatisPlus在面向对象、标准化、自动化方面可能略逊一筹。
接下来说下这两个ORM框架的明显缺点:
JPA 主要缺点
- 上手相对较难;
- JPA 在处理多表关联查询时复杂度非常高;
MybatisPlus 主要缺点
- 更多的SQL,所以导致维护起来相对较难;
- 由于SQL多,也更容易出现手写了很多具有数据库方言的SQL,这就导致当切换底层数据库时,还需要修改SQL。
又是一场势均力敌的较量,一般来说,如果一个技术栈没有特别明显的优势,逼得你必须使用它时,你的技术选型可能更加取决于团队的熟悉程度。其实我们这次选型也是基于这个考虑,虽然还有一些其他原因(后面再补充),由于以前项目都是使用的 MybatisPlus ,虽然这次选型时有充分考虑JPA,因为其出色的面向对象特性,使得以后切换数据库变得简单。但是最终还是败给了现实!!!!