ORM思想之思想介绍篇:ORM思想介绍
1. ORM 介绍
1.1 ORM概念
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
ORM在业务逻辑层和数据库层之间充当了桥梁的作用。
1.2 ORM 由来
让我们从O/R开始。字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。
几乎所有的软件开发过程中都会涉及到对象和关系数据库。在用户层面和业务逻辑层面,我们是面向对象的。当对象的信息发生变化的时候,我们就需要把对象的信息保存在关系数据库中。
按照之前的方式来进行开发就会出现程序员会在自己的业务逻辑代码中夹杂很多SQL语句用来增加、读取、修改、删除相关数据,而这些代码通常都是极其相似或者重复的。
1.3 ORM 优势
ORM解决的主要问题是对象和关系的映射。它通常将一个类和一张表一一对应,类的每个实例对应表中的一条记录,类的每个属性对应表中的每个字段。
ORM提供了对数据库的映射,不用直接编写SQL代码,只需操作对象就能对数据库操作数据。
让软件开发人员专注于业务逻辑的处理,提高了开发效率。
2. 回顾JDBC编程
目前,通过 Java 语言连接并操作数据库的技术或方式已经有很多了,例如:JDBC,Hibernate,MyBatis 等等。
其中 JDBC 是 Java 原生的 API,支持连接并操作各种关系型数据库。相信每个程序员都是从 JDBC 开始学起的,然后才接触到各种持久层框架。
JDBC 作为 Java 原生 API,有优点,也有缺点,这里主要说一下缺点:
- 编码繁琐,效率低
- 数据库连接的创建和释放比较重复,也造成了系统资源的浪费
- 大量硬编码,缺乏灵活性,不利于后期维护
- 参数的赋值和数据的封装全是手动进行
正是因为 JDBC 存在着各种问题,所以才导致很多持久层框架应运而生,例如:Hibernate和 MyBatis,这两个都是目前比较流行的持久层框架,都对 JDBC 进行了更高级的封装和优化,相信大家对这两个框架都比较熟悉。
3. 如何改进 JDBC
很多程序员其实都亲自尝试过自己对 JDBC 进行封装和优化,设计并编写过一些 API,每个程序员在做这个事情时,可能设计以及实现的思想都是不一样的,这些思想各有特点,各有千秋,可以分为两大类:
3.1 第一类 封装和优化
着重对 JDBC 进行 API 层的抽取和封装,以及功能的增强,典型代表是 Apache 的DbUtils
程序员在使用 DbUtils 时仍然需要编写 sql 语句并手动进行数据封装,但是 API 的使用比 JDBC方便了很多,下面是使用 DbUtils 的代码片段:
@Test
public void testQuery(){
//创建 queryRunner 对象,用来操作 sql 语句
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
//编写 sql 语句
String sql = "select * from user";
//执行 sql 语句
try {
List<User> list = qr.query(sql, new BeanListHandler<User>(User.class));
System.out.println(list);
} catch (SQLException e) {
e.printStackTrace();
}
}
3.2 第二类 ORM
借鉴面向对象的思想,让程序员以操作对象的方式操作数据库,无需编写 sql 语句,典型代表是 ORM。ORM(Object Relational Mapping)吸收了面向对象的思想,把对 sql 的操作转换为对象的操作,从而让程序员使用起来更加方便和易于接受。这种转换是通过对象和表之间的元数据映射实现的,这是实现 ORM 的关键,如下图所示:
由于类和表之间以及属性和字段之间建立起了映射关系,所以,通过 sql 对表的操作就可以转换为对象的操作,程序员从此无需编写 sql 语句,由框架根据映射关系自动生成,这就是 ORM 思想。
4. 常见的 ORM 框架
- Hibernate :一般我们把 Hibernate 称之为全自动的 ORM 框架
- MyBatis:把 MyBatis 称之为半自动的 ORM 框架
使用过这两个框架的程序员,对于 ORM 一定不会陌生。同时,ORM 也是 JPA (SUN 推出的持久层规范)的核心内容.