对象关系映射(ORM)介绍理解

问题背景

假设,让你设计一个框架,把jdbc封装一下??
JDBC操作步骤:

  1. 获取数据库连接Connection
  2. 创建操作命令对象Statement
  3. 执行sql语句(sql中,如果有占位符,在执行sql语句前要替换,会使用很多字段来替换占位符(一般包装成一个对象,通过对象属性来操作))
  4. 处理结果集(查询操作)----通过结果集对象.get类型(”结果集表头字段名“),设置到一个对象属性之中
  5. 释放资源

那么??使用JDBC操作是否方便呢?那么也就需要设计一个框架,来更好地操作数据库!!!

ORM是什么?为何要有ORM?

我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(增、删、改、查),而一旦谈到数据的管理操作,就需要用到数据库管理软件,例如mysql、oracle、Microsoft SQL Server等。

在这里插入图片描述
如果应用程序需要操作数据(比如将用户注册信息永久存放起来),那么我们需要在应用程序中编写原生sql语句,然后使用pymysql模块远程操作mysql数据库。

在这里插入图片描述
针对应用程序的数据操作,直接编写原生sql语句会存在两方面的问题,严重影响开发效率,如下:

  • sql语句的执行效率问题:应用开发程序员需要耗费一大部分精力去优化sql语句
  • 数据库迁移问题:针对mysql开发的sql语句无法直接应用到oracle数据库上,一旦需要迁移数据库,便需要考虑跨平台问题

为了解决上述问题,django引入了ORM的概念,ORM全称Object Relational Mapping,即对象关系映射,是在pymysq之上又进行了一层封装,对于数据的操作,我们无需再去编写原生sql,取代代之的是基于面向对象的思想去编写类、对象、调用相应的方法等,ORM会将其转换/映射成原生SQL然后交给pymysql执行

在这里插入图片描述
基于图2所示,有了ORM框架,开发人员既不用再去考虑原生SQL的优化问题,也不用考虑数据库迁移的问题,ORM都帮我们做了优化且支持多种数据库,这极大地提升了我们的开发效率。

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

数据库的表(table) --> 类(class)
记录(record,行数据)--> 对象(object)
字段(field)--> 对象的属性(attribute)

数据库设计表和字段时,也是同时设计java的实体类。
在这里插入图片描述

示例理解

这是一行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。

参考链接:
ORM 实例教程

ORM介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值