mybatis mybatis plus mybatis jpa hibernate spring data jpa比较

慕容博涛
2023-12-01

mybatis  

               前身是ibatis,是一个轻量级ORM框架,需要自己写sql,DAO(mapper) 只写接口无需写实现,使用xml方式写sql,允许使用OGNL表达式 来动态写sql语句。

MyBatis JPA

               在mybatis的基础上添加了以下特性(比较重要的)

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer2005、SQLServer 等多种数据库
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 XML 热加载:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 支持关键词自动转义:支持数据库关键词(order、key......)自动转义,还可自定义关键词

Hibernate

              使用XML做数据库字段和DO 字段映射,使用HQL写sql,最NP的是他可以屏蔽一般关系型数据库的sql语句的区别,使用方言来适配各种类型的数据库,写复杂的查询的话,比较麻烦,性能也不好。

Spring DATA JPA

               spring data jpa其实是 hibernate 实现的,实现的jpa协议。 jpa协议使用注解来标记DO字段和数据库表字段的关系,并且可以很方便的支持一对一,一对多的关联 插入,删除,更新,可以说是双击666 很好用的。

                他还支持根据命名规范写方法名,自动生成sql比如 findByName。

Mybatis JPA

                 实现了部分JPA协议,同样是mybatis的一个插件,拥有mybatis,单表CRUD,一对一,一对多查询功能,支持根据mapper 接口的方法名字自动生成sql,只支持mysql,配合AOP可以支持 主键自动生成,配合基类可以支持ActiveRecord 模式,代码很少,方便定制。

                 项目地址:https://gitee.com/shuaizai88/jack_mybatis_jpa

 最佳的解决方案是:  Mybatis JPA + Mybatis + Spring DATA JPA 一起使用,既保证了Spring DATA  JPA的多表操作优势,又保证了Mybatis的灵活性。

  FAQ:

                 为什么不能使用Mybatis Plus + Mybatis + Spring DATA JPA 一起用呢?

                  因为Mybatis Plus  自己做了一套ORM 标准不兼容JPA。

 

 

 类似资料: