JAVA 常见ORM框架汇总 - 附一款eloquent-orm

自适应
• 阅读 1805

​ORM 是 Object Relational Mapping 的缩写,译为 “对象关系映射” 框架。

所谓的 ORM 框架就是一种为了解决面向对象与关系型数据库中数据类型不匹配的技术,它通过描述 Java 对象与数据库表之间的映射关系,自动将 Java 应用程序中的对象持久化到关系型数据库的表中。

ORM 框架是一种数据持久化技术,即在对象模型和关系型数据库之间建立起对应关系,并且提供一种机制,可通过 JavaBean 对象操作数据库表中的数据。

在实际开发中,程序员使用面向对象的技术操作数据,而存储数据时,使用的却是关系型数据库,这样就造成了很多不便。ORM 可以在对象模型和关系型数据库的表之间建立一座桥梁,程序员使用 API 直接操作 JavaBean 对象就可以实现数据的存储、查询、更改和删除等操作。

MyBatis 框架通过简单的 XML 或注解进行配置和原始映射,将实体类和 SQL 语句之间建立起映射关系,是一种半自动化的 ORM 实现。

主流的 Java ORM 框架

当前 Java ORM 框架产品有很多,常见的框架有 Hibernate 和 MyBatis,其主要区别如下。

1) Hibernate

Hibernate 框架是一个全表映射的框架。通常开发者只要定义好持久化对象到数据库表的映射关系,就可以通过 Hibernate 框架提供的方法完成持久层操作。

开发者并不需要熟练地掌握 SQL 语句的编写,Hibernate 框架会根据编制的存储逻辑,自动生成对应的 SQL,并调用 JDBC 接口来执行,所以其开发效率会高于 MyBatis 框架。

然而 Hibernate 框架自身也存在一些缺点,例如:

多表关联时,对 SQL 查询的支持较差;
更新数据时,需要发送所有字段;
不支持存储过程;
不能通过优化 SQL 来优化性能。

这些问题导致其只适合在场景不太复杂且对性能要求不高的项目中使用。

Hibernate 官网:http://hibernate.org/

2) MyBatis

MyBatis 框架是一个半自动映射的框架。这里所谓的 “半自动” 是相对于 Hibernate 框架全表映射而言的,MyBatis 框架需要手动匹配提供 POJO、SQL 和映射关系,而 Hibernate 框架只需提供 POJO 和映射关系即可。

与 Hibernate 框架相比,虽然使用 MyBatis 框架手动编写 SQL 要比使用 Hibernate 框架的工作量大,但 MyBatis 框架可以配置动态 SQL 并优化 SQL、通过配置决定 SQL 的映射规则,以及支持存储过程等。对于一些复杂的和需要优化性能的项目来说,显然使用 MyBatis 框架更加合适。

MyBatis 框架可应用于需求多变的互联网项目,如电商项目;Hibernate 框架可应用于需求明确、业务固定的项目,如 OA 项目、ERP 项目等。

3) gaarason

让连接数据库以及对数据库进行增删改查操作变得非常简单,不论希望使用原生 SQL、还是查询构造器,还是 Eloquent ORM。

Eloquent ORM 提供一个美观、简单的与数据库打交道的 ActiveRecord 实现,每个数据表都对应一个与该表数据结构对应的实体(Entity),以及的进行交互的模型(Model),通过模型类,你可以对数据表进行查询、插入、更新、删除等操作,并将结果反映到实体实例化的 java 对象中。

对于关联关系 Eloquent ORM 提供了富有表现力的声明方式,与简洁的使用方法,并专注在内部进行查询与内存优化,在复杂的关系中有仍然有着良好的体验。

兼容于其他常见的 ORM 框架, 以及常见的数据源 (DataSource)

// 查询id为4的一条数据 select * from student where id = 4 limit 1
Student student = studentModel.find(4).toObject();

// 表达式列名风格 select name,age from student where id in (1,2,3)
List<Student> Students = studentModel.newQuery().whereIn(Student::getId, 1,2,3)
    .select(Student::getName).select(Student::getAge)
    .get().toObjectList();

// 稍复杂嵌套的语句 select id,name from student where id=3 or(age>11 and id=7 and(id between 4 and 10 and age>11))
List<Student> Students = studentModel.newQuery().where("id", "3").orWhere(
    builder -> builder.where("age", ">", "11").where("id", "7").andWhere(
        builder2 -> builder2.whereBetween("id", "4", "10").where("age", ">", "11")
    )
).select("id", "name").get().toObjectList();


// 关联查询 找出学生们的老师们的父亲们的那些房子
List<Student> Students = studentModel.newQuery().whereIn("id", "1","2","3").get().with("teacher.father.house").toObjectList();


// 增加关联 给id为8的学生增加3名老师(id分别为1,2,3)
studentModel.findOrFail(8).bind("teachers").attach( teacherModel.findMany(1,2,3) );

 gaarason 中文文档:https://github.com/gaarason/d...

4) spring data JPA

spirng data jpa是spring提供的一套简化JPA开发的框架,按照约定好的【方法命名规则】写dao层接口,就可以在不写接口实现的情况下,实现对数据库的访问和操作。同时提供了很多除了CRUD之外的功能,如分页、排序、复杂查询等等。

Spring Data JPA 可以理解为 JPA 规范的再次封装抽象,底层还是使用了 Hibernate 的 JPA 技术实现。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
这可能是目前最全的!java开发手册嵩山版
在这里分享一份mybatis从入门到精通的强力教程,定能够助你一臂之力。Mybatis基本介绍1.ORM和MyBatis1.对象/关系数据库映射(ORM)1.基本映射方式1.流行的ORM框架简介目前流行的编程语言,例如Java、C等,都是面向对象的编程语言;而目前主流的数据库产品,例如Oracle、DB2等,依然是关系数据库。编程语言和底
Wesley13 Wesley13
3年前
JavaEE之Hibernate(开放源代码的对象关系映射框架)
Hibernate(开放源代码的对象关系映射框架)1.简介Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随
Stella981 Stella981
3年前
Python 常用的ORM框架简介
ORM概念ORM(ObjectRalationalMapping,对象关系映射)用来把对象模型表示的对象映射到基于SQL的关系模型数据库结构中去。这样,我们在具体的操作实体对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作实体对象的属性和方法。ORM技术是在对象和关系之间提供了一条桥梁,前台的对象型数据和数据
Wesley13 Wesley13
3年前
Java面试题
91,什么是ORM?        对象关系映射(ObjectRelationalMapping,简称ORM)是一种为了解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术;        简单的说,ORM是通过使用描述对象和数据库之间映射的元数据(在Java中可以用XML或者是注解),将程序中的对象自动持久化到关系数据库中或者将
Stella981 Stella981
3年前
JPA、Hibernate、Spring data jpa之间的关系,终于明白了
什么么是JPA?全称JavaPersistenceAPI,可以通过注解或者XML描述【对象关系表】之间的映射关系,并将实体对象持久化到数据库中。为我们提供了:1)ORM映射元数据:JPA支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;如:@Entity、@Table、@C
Stella981 Stella981
3年前
Spring Boot(五):Spring Boot Jpa 的使用
一、SpringBootJpa简介Jpa(JavaPersistenceAPI)是sun官方提出的java持久化规范。它为java开发人员提供了一种对象/关联映射工具,来管理java应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在hibernate、toplink、jdo等ORM框架各自为营的局面。
Stella981 Stella981
3年前
Django框架中的model(操作数据库)
什么是ORMORM,即ObjectRelationalMapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。ORM的优缺点是什么优点:摆脱复杂的SQL操作
Stella981 Stella981
3年前
Django框架详细介绍
一、概述    ORM(ObjectRelationalMapping),全称:对象关系映射,简单的说就是通过创建类、实例化出对象的方法,使得类、对象、对象的属性能够和数据库中的表、记录、字段意义对应。  ORM只是一种工具,避免了开发人员在开发过程中不用反复地编写大量复杂的SQL语句,而可以专注于业务逻辑上的开发,提高开发效率,但是OR
Stella981 Stella981
3年前
JPA、Hibernate框架、通用mapper
JPA是描述对象关系表的映射关系,将运行期实体对象持久化到数据库中,提出以面向对象方式操作数据库的思想。Hibernate框架核心思想是ORM实现自动的关系映射。缺点:由于关联操作提出Hql语法。执行CRUD时产生大量冗余的sql,性能较低mybatis继承Hibernate优点,使用通用mapper插件实现JPA的思想操作数据库通用map