ORM概念和原理
ORM 概念
我们在介绍 MyBatis 时说到,MyBatis是一种半自动 ORM 实现。那何为 ORM,何为半自动?
ORM(Object/Relation Mapping,对象/关系数据库映射)是一种描述对象与关系数据库之间映射的规范。
ORM 作用
Java对象和关系数据库如同马和牛,简直是牛头不对马嘴,存在不协调的问题。那这个不协调的问题导致怎样的结果呢?导致的结果就是我们在数据库编程时,使用 JDBC 从数据库里获取的不是对象,而是一个个数据库字段,需要手动创建一个 Java 对象实体,再把这些字段存放到 Java 对象实体的属性里。代码如下:
// 从数据库获取字段
int id = rs.getInt("id");
String userName = rs.getString("userName");
String password = rs.getString("password");
String name = rs.getString("name");
int age = rs.getInt("age");
int sex = rs.getInt("sex");
Date birthday = rs.getDate("birthday");
String created = rs.getString("created");
String updated = rs.getString("updated");// 创建对象实体并将字段存放到对象属性中
UserEntity userEntity = new UserEntity();
userEntity.setId(id);
userEntity.setUserName(userName);
userEntity.setPassword(password);
userEntity.setName(name);
userEntity.setAge(age);
userEntity.setSex(sex);
userEntity.setBirthday(birthday);
userEntity.setCreated(created);
userEntity.setUpdated(updated);
由于 Java 对象与关系数据库之间不协调的问题,导致的结果就是数据库编程代码繁琐,开发效率低。
MyBatis 是一款部分实现 ORM 规范的框架,它可以把关系型数据库封装成对象,解决面向对象编程语言与关系数据库之间不协调的问题,从而搭建面向对象编程语言与关系数据库之间的桥梁。
ORM 映射规则
- 类与表相对应(基本规则)
- 类的属性(或成员变量)与表的字段相对应(基本规则)
- 类的实例与表中具体的一条记录相对应(基本规则)
- 一个类可以对应多个表,一个表也可以对应多个类
- 数据库中的表可以没有主键,但是类中必须有主键字段
- 数据库中表与表之间的关系对应类与类之间的关系
- 数据库中表的字段个数和名称可以和类的属性(或成员变量)不一样
这7条 ORM 映射规则中,前3条是基本规则,也是最重要的规则。
ORM 框架
我们已经知道 ORM 是一种规范,ORM 本身并不能带来开发效率的提升,需要实现规范才行。
ORM 框架就是指实现了 ORM 映射规则的框架,而 MyBatis 就是一种 ORM 框架,当然Hibernate也是。有了这些 ORM 框架,我们就不用自己手动编写代码去实现 ORM 规范,使用 ORM 框架就可以发挥 ORM 规范的威力,以提升开发效率。
ORM 总结
- ORM 作用是为对象与关系数据库之间搭建桥梁,以解决对象与关系数据库之间不协调的问题
- ORM 框架已实现 ORM 映射规则(MyBatis 为半自动 ORM 框架,而 Hibernate 为全自动 ORM 框架)