> 文章列表 > MyBatis-plu 和 JPA 对比

MyBatis-plu 和 JPA 对比

MyBatis-plu 和 JPA 对比

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

MyBatis-plu 和 JPA

  • 前言
  • 一、说下相同点
  • 二、差异点
    • 一、从实现来说:CURD实现方式不一样
    • 二、分页
    • 三、雪花id
    • 四、伪删除
    • 五、子类排除父类的字段
  • 总结

前言

提示:这里可以添加本文要记录的大概内容:

说来尴尬,工作这么多年,还没用过JPA。

自己用了下querydsl-jpa,和常用的mybatis-plus进行了下对比。
整体来说都有自己的优点:mybatis-plus更加轻量,JPAQuery可以实现联表查询。


一、说下相同点

1:都包装了简单的CRUD,可以直接用
2:都支持自定义sql(如:@Select())
3:都支持二级缓存

二、差异点

一、从实现来说:CURD实现方式不一样

mybatis-plus :
Mapper(Dao)类extends BaseMapper
实现类里extends ServiceImpl
接口类extends IService

jpa:
repository类(等同于Mapper/DAO类)extends JpaRepository
但是,jpa在定义好数据库类(如:User类)后,需要compile一下(会生产QUser类)

二、分页上

mybatis-plus :
有自己的分页插件,也能很好的支持第三方插件,如:pageHelper
jpa:需要自己处理count查询

三、雪花id

mybatis-plus: 自带
jpa:需要自己实现

四、伪删除

mybatis-plus: 有@TableLogic
jpa:需要自己实现

五、子类排除父类的字段

mybatis-plus: 子类里重新定义父类里的字段,用@transient
jpa:暂不能解决


总结

归纳下大佬们的理解:
jpa:
1:默认使用hibernate作为ORM
2:更加偏向于面向对象
3:支持多表关联(用JPAQuery,不是像mybatis那样写在xml)

mybatis:
1:避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
2:更偏向于面向数据(面向关系),致命优点:简单、可读性强

网上一直说的性能:
两个ORM框架的效率不会查特别多(毕竟一次插入万级数据,且要求ms级别,这种毕竟是极少数)。平时开发中,几百条数据的情况下,两者都差不多的。

到底用哪个
第一:跟着公司走,毕竟大头兵没啥发言权
第二:我个人更推荐mybatis-plus,尽量不写xml。联表逻辑放在代码里实现(jvm运行代码很快的,避免for内部查库)
第三:JPA的学习成本比MyBatis-plus大

最后声明下:本文章没有商用,且参考了网上许多大佬的文章:

重点推荐:详细对比 JPA、MyBatis-Plus 的差异:
https://zhuanlan.zhihu.com/p/425864811

springjpa和mybatis哪个查询效率高?
https://www.zhihu.com/question/356307466/answer/919908635

JPA,Hibernate,mybatis,mybatis plus,Querydsl
https://blog.csdn.net/qq_44772660/article/details/111840512

MyBatis还是JPA? 终于有答案了!
https://zhuanlan.zhihu.com/p/263043522

就不一一列举了