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优缺点
优点:
- 数据模型都在一个地方定义,更容易更新和维护,也利于重用代码。
- ORM有现成的工具,很多功能都可以自动完成,比如数据消毒、预处理、事务等等。
- 它迫使你使用 MVC 架构,ORM 就是天然的Model,最终使代码更清晰。
- 基于 ORM 的业务代码比较简单,代码量少,语义性好,容易理解。
- 你不必编写性能不佳的SQL。
缺点:
- ORM 库不是轻量级工具,需要花很多精力学习和设置。
- 对于复杂的查询,ORM 要么是无法表达,要么是性能不如原生的 SQL。
- 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 对象关系映射的主要内容,如果未能解决你的问题,请参考以下文章