【Koa】简单聊聊 ORM 基本概念、ORM应用

ORM 基本概念

- 什么是ORM

即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了 。

- 什么是“持久化”

持久(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。

- 什么是 “持久层”

持久层(Persistence Layer),即专注于实现数据持久化应用领域的某个特定系统的一个逻辑层面,将数据使用者和数据实体相关联。

为什么要做持久化和ORM设计(重要)

    在目前的企业应用系统设计中,MVC,即 Model(模型)- View(视图)- Control(控制)为主要的系统架构模式。MVC 中的 Model 包含了复杂的业务逻辑和数据逻辑,以及数据存取机制(如 JDBC的连接、SQL生成和Statement创建、还有ResultSet结果集的读取等)等。
    将这些复杂的业务逻辑和数据逻辑分离,以将系统的紧耦 合关系转化为松耦合关系(即解耦合),是降低系统耦合度迫切要做的,也是持久化要做的工作。MVC 模式实现了架构上将表现层(即View)和数据处理层(即Model)分离的解耦合,而持久化的设计则实现了数据处理层内部的业务逻辑和数据逻辑分离的解耦合。 而 ORM 作为持久化设计中的最重要也最复杂的技术,也是目前业界热点技术。
  • ORM 用来把对象模型表示的对象,映射到基于 SQL的关系模型数据库结构中去。这样,我们在具体的操作实体数据库的时候,就不需要再去和复杂的 SQL语句打交道,只需简单的操作实体对象的属性和方法,就可以达到操作数据库的效果。
  • ORM技术是在对象和数据库之间提供了一条桥梁,前台的对象型数据和数据库中的关系型的数据通过这个桥梁来相互转化。不同的编程语言,有不同的ORM框架。例如Java,它的ORM框架就有:Hibernate,Ibatis/Mybatis等等。在Node Web开发中,Sequelize 就是一款比较流行的 ORM 框架。

ORM的应用

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

	1、数据库的表(table) --> 类(class)
	2、记录(record,行数据)--> 对象(object)
	3、字段(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 有下面这些优点:

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

ORM 也有很突出的缺点:

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

使用步骤:

1.使用 ORM 的第一步,就是你必须告诉它,怎么连接数据库
2.创建model:连接数据库以后,下一步就要把数据库的表,转成数据模型(Model)
3.创建数据库操作类,通过Model 里面数据库表的定义,创建操作方法
4.在业务流程中调用相关方法

CRUD方法:

数据库的基本操作有四种:create(新建)、read(读取)、update(更新)和delete(删除),简称 CRUD

ORM 将这四类操作,都变成了对象的方法。

1、find()方法用于根据主键,获取单条记录或多条记录
2、where()方法用于指定查询条件
3、create()方法用于新建记录
4、Update()方法用于更新记录
5、destroy()方法用于删除记录

关系-表与表之间的关系(relation),分成三种:

1、一对一(one-to-one):一种对象与另一种对象是一一对应关系,比如一个学生只能在一个班级
2、一对多(one-to-many): 一种对象可以属于另一种对象的多个实例,比如一张唱片包含多首歌
3、多对多(many-to-many):两种对象彼此都是"一对多"关系,比如一张唱片包含多首歌,同时一首歌可以属于多张唱片

建立关系的模型关联关系设定方法如下:

1、hasOne - 与目标模型建立1:1关联关系,关联关系(外键)存在于目标模型中
2、belongsTo - 与目标模型建立1:1关联关系,关联关系(外键)存在于源模型中
3、hasMany - 与目标模型建立1:N关联关系,关联关系(外键)存在于目标模型中
4、belongsToMany - 与目标模型建立N:M关联关系,会通过sourceId和targetId创建交叉表

猜你喜欢

转载自blog.csdn.net/weixin_43352901/article/details/108395043
Orm