Object-Relationl Mapping对象关系映射,通过实例对象的语法,完成关系型数据库的操作的技术,它的作用是在关系型数据库和对象之间作一个映射,在具体的操作数据库时,就不需要再去和复杂的SQL语句打交道,像平时操作对象一样
使用 JDBC 操作数据库,业务处理逻辑和数据存取逻辑混为一谈。 一般基本都是如下几个步骤:
1、建立数据库连接,获得 Connection 对象。
2、根据用户的输入组装查询 SQL 语句。
3、根据 SQL 语句建立 Statement 对象 或者 PreparedStatement 对象。
4、用 Connection 对象执行 SQL语句,获得结果集 ResultSet 对象。
5、然后一条一条读取结果集 ResultSet 对象中的数据。
6、根据读取到的数据,按特定的业务逻辑进行计算。
7、根据计算得到的结果再组装更新 SQL 语句。
8、再使用 Connection 对象执行更新 SQL 语句,以更新数据库中的数据。
9、最后依次关闭各个 Statement 对象和 Connection 对象。
ORM 把数据库映射成对象
表(table) --> 类(class)
记录(行数据)--> 对象(object)
字段(field)--> 对象属性(attribute)
举例来说,下面是一行 SQL 语句。
SELECT id, first_name, last_name, phone, birth_date, sex
FROM persons
WHERE id = 10
程序直接运行 SQL,操作数据库的写法如下。
res = db.execSql(sql);
name = res[0]["FIRST_NAME"];
改成 ORM 的写法如下
p = Person.get(10);
name = p.first_name;
一比较就可以发现,ORM 使用对象,封装了数据库操作,因此可以不管 SQL 语言。开发者只使用面向对象编程,与数据对象直接交互,不用关心底层数据库。
总结起来,ORM 有下面这些优点。
数据模型都在一个地方定义,更容易更新和维护,也利于重用代码。
ORM 有现成的工具,很多功能都可以自动完成,比如数据消毒、预处理、事务等等。
它迫使你使用 MVC 架构,ORM 就是天然的 Model,最终使代码更清晰。
基于 ORM的业务代码比较简单,代码量少,语义性好,容易理解。 你不必编写性能不佳的 SQL。
但是,ORM 也有很突出的缺点。
ORM 库不是轻量级工具,需要花很多精力学习和设置。 对于复杂的查询,ORM 要么是无法表达,要么是性能不如原生的 SQL。
ORM抽象掉了数据库层,开发者无法了解底层的数据库操作,也无法定制一些特殊的 SQL。
Java中ORM的原理:要实现JavaBean的属性到数据库表的字段的映射,任何ORM框架不外乎是读某个配置文件把JavaBean的属性和数据库表的字段自动关联起来,当从数据库Query时,自动把字段的值塞进JavaBean的对应属性里,当做INSERT或UPDATE时,自动把 JavaBean的属性值绑定到SQL语句中。