常见ORM 技术选型
hibernate、Spring Data JPA和 Mybatis 对比优缺点以及应用场景
一、Mybatis 优点:上手容易、提供xml标签、支持动态SQL编程,Mapper映射,支持对象与数据库的ORM字段关系映射
Mybatis 缺点:
- SQL语句的编写工作量较大,尤其是字段多、关联表多时,更是如此,对开发人员编写SQL语句的功底有一定要求。
- SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库
- 当希望对象的持久化对应用程序完全透明是,不适合使用Mybatis
- 当数据库有移植需求或需要支持多种数据库时,不适合使用Mybatis
Mybatis 应用场景:适用于表关联较多的项目,持续维护开发迭代较快的项目,需求变化较多的项目,如互联网项目
二、Spring Data JPA 应用场景:传统项目或者关系模型较为清晰稳定的项目,建议JPA(比如DDD设计中的领域层)
Spring Data JPA:一般会和Hibernate一起使用
三、Hibernate 入门门槛较高,不需要写SQL,SQL会自动生成
Hibernate 缺点:sql的优化比较困难 Hibernate 应用场景:适用与需求变化不多的中小型项目中,比如后台管理,erp,orm,oa 四、比较 hibernate是面向对象的,而MyBatis是面向关系的
数据分析型的OLAP应用适合用MyBatis,事务处理型OLTP应用适合用JPA。 越是复杂的业务,越需要领域建模,建模用JPA实现最方便灵活。但是JPA想用好,门槛比较高,不懂DDD的话,就会沦为增删改查了。 复杂的查询应该是通过CQRS模式,通过异步队列建立合适查询的视图,通过视图避免复杂的Join,而不是直接查询领域模型。 从目前的趋势来看OLAP交给NoSQL数据库可能更合适
Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。 Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。 Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。 Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳