Mybatis 从入门到入土系列(01 - 偶遇了个ORM)

657 阅读4分钟

某一天,朋友跟咖啡兔抱怨说:
“用JDBC原生的API方法对数据库进行操作,虽然效率上是很好,但是顶不住SQL写的麻烦啊!!!,要是遇到某一个表字段又臭又复杂,写出来的SQL语句就不精致。我需要浪费大量的时间去写一堆繁琐的SQL,还容易出错,没准犯困写着写着就是一个BUG。

那我们去认识一下 ORM 框架!

初见 ORM 框架:

什么是ORM框架

将ORM这几个拆开来看:O (Object) 对象 ,R (Relational) 关系 ,M (Mapping) 图。合在一起来说就是 对象关系映射图(Object/Relation Mapping)。

ORM 框架的核心思想: 将数据库中的表单记录数据通过关系映射规则,映射成为对象元素,以对象的方式展示数据,将传统意义上的对数据的操作改为基于对象进行操作。ORM框架是通过使用描述对象和数据库映射的元数据,将程序中的对象持久化到关系数据库中。

那么ORM的诞生主要是为了什么?

ORM框架的诞生主要好似为可解决对象关系映射。通常意义上来说,域模型和关系模型分别是建立在概念模型的基础上额。而域模型是面向对象的关系,但是关系模型则是面向关系的。在开发过程中的,一般情况下一个持久化对象类与一张数据表对应。类的每个实例对应表中的每一条数据记录,而类的属性是对应表中的每一个字段。

ORM 方法基于三个原则:

  1. 简单 :建模数据简单化,用最基本的形式进行数据建模。
  2. 传达性:数据库结构被任何人能理解的语言文档化。
  3. 精确性:基于数据模型创建标准化的结构。

ORM 的优点与缺点:

优点:

  1. 在传统的交互设计上提高了开发效率,大大缩减了开发人员的编码时间。自动的对实体对象与数据库中的表进行属性的映射。减少了SQL的编码,将传统的SQL编码演化为像操作对象一样简单。
  2. 将对数据库访问的细节隐藏,更加“封闭式”的交互成为了ORM的核心。

缺点:

  1. 映射和关联之间的管理实现了自动化,但是却是在牺牲性能的基础下。现在的各种ORM框架都在尝试使用各种方法来减轻这块(LazyLoad,Cache),效果还是很显著的。
  2. 面向对象的查询语言(X-QL)作为一种数据库与对象之间的过渡,虽然隐藏了数据层面的业务抽象,但并不能完全的屏蔽掉数据库层的设计,并且无疑将增加学习成本.
  3. ORM框架不适用于复杂场景下的查询,但是依旧是可以实现。视图可以解决大部分 calculated column,case ,group,having,order by, exists,但是查询条件较为繁琐。

常用的 ORM 框架:

Hibernate

Hibernate 是一个持久化框架和 ORM 框架,持久化和 ORM 是两个有区别的概念,持久化注重对象的存储方法是否随着程序的退出而消亡,ORM 关注的是如何在数据库表和内存对象之间建立关联。

Hibernate 使用 POJO 来表示 Model,使用 XML 配置文件来配置对象和表之间的关系,它提供了一系列 API 来通过对对象的操作而改变数据库中的过程。

Hibernate 更强调如何对单条记录进行操作,对于更复杂的操作,它提供了一种新的面向对象的查询语言:HQL。

MyBatis

MyBatis是另外一种 ORM 框架,和 Hibernate 擅长操作单条记录不同,MyBatis是基于 SQL 模板的,可以说,MyBatis 每次和数据库进行操作时,都有明确的 SQL 语句,而这些 SQL 语句,就是我们定义在配置文件中的。

(PS:咖啡🐰在后面大部分都是围绕 Mybatis 进行学习与开发的,毕竟许多公司已经逐渐淡化Hibernate的使用了。)