ORM 对象关系映射

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORM 对象关系映射相关的知识,希望对你有一定的参考价值。

文章目录

ORM概念

ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。

ORM可理解成一种规范,它概述了这类框架的基本特征,完成面向对象的变成语言到数据库的映射。

ORM 把数据库映射成对象。

  • 将数据库的表(table)映射为:类(class)
  • 记录(record,行数据)映射为:对象(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简介

JPA:JPA本身是一种ORM的规范,并不是ORM产品,它是JavaEE规范制定者向开源世界学习的结果,JPA实体与HibernatePo十分相似,甚至JPA实体完全可以作为HibernatePo类的使用,也就我们俗称的实体。相对于其他开源ORM框架,JPA最大的优势在于它是官方标准,具有通用性。

Hibernate:目前最流行的开源ORM框架,已经被选作JBoss的持久层解决方案,整个Hibernate的项目也一并投入了JBoss的怀抱,而Jboss又加入了Red Hat组织,因此Hibernate属于Red Hat组织的一部分,Hibernate灵巧的数据,优秀的性能,还有丰富的文档。

Mybatis早期名称是ibatis,是Apache软件基金组织的子项目,也是一种ORM框架,它是一种SQLMapping框架,曾经在Javaee开发中扮演非常重要的角色,但因为并不支持纯粹的面向对象的操作,因此现在逐渐开始被取代,但在一些公司中依然占有一席之地,特别是一些对数据访问特别灵活的地方时,Mybatis更加灵活,它允许开发人员直接编写SQL语句。

Toplink:是oracle公司的产品,早年单独作为ORM使用一直没有赢得广泛的市场。

(JPA是ORM的规范,Hibernate、Mybatis、Toplink是ORM框架的产品)

ORM优缺点

优点:

  1. 数据模型都在一个地方定义,更容易更新和维护,也利于重用代码。
  2. ORM有现成的工具,很多功能都可以自动完成,比如数据消毒、预处理、事务等等。
  3. 它迫使你使用 MVC 架构,ORM 就是天然的Model,最终使代码更清晰。
  4. 基于 ORM 的业务代码比较简单,代码量少,语义性好,容易理解。
  5. 你不必编写性能不佳的SQL。

缺点:

  1. ORM 库不是轻量级工具,需要花很多精力学习和设置。
  2. 对于复杂的查询,ORM 要么是无法表达,要么是性能不如原生的 SQL。
  3. ORM 抽象掉了数据库层,开发者无法了解底层的数据库操作,也无法定制一些特殊的 SQL。

命名规范:

(1)一个类对应一张表。类名是单数,且首字母大写;表名是复数,且全部是小写。比如,表books-----类Book。
(2)如果名字是不规则复数,则类名依照英语习惯命名,比如,表mice对应类Mouse,表people对应类Person。
(3)如果名字包含多个单词,那么类名使用首字母全部大写的骆驼拼写法,而表名使用下划线分隔的小写单词。比如,表book_clubs对应类BookClub,表line_items对应类LineItem。
(4)每个表都必须有一个主键字段,通常是叫做id的整数字段。外键字段名约定为单数的表名 + 下划线 + id,比如item_id表示该字段对应items表的id字段。

以上是关于ORM 对象关系映射的主要内容,如果未能解决你的问题,请参考以下文章

ORM-对象关系映射

ORM对象关系映射框架基本搭建

ORM 对象关系映射

Java实现关系型数据库工具类JdbcUtils系列五:ORM对象关系映射

Orm对象关系映射

5 -- Hibernate的基本用法 --1 1 对象/关系数据库映射(ORM)