【产品经理】捣鼓数据库,总有一天你会用到 ORM

产品经理给我的印象,就是天天在捣鼓数据。什么日活、留存、转化,各种报表眼花缭乱。什么特征、画像、渠道,各种分析信手拈来。其实你看到的这些东西,都离不开数据库的支持。程序员先把原始数据通过埋点上报等手段收集起来,存到数据库里。当你想看某个数据的时候,程序会先把原始数据读出来,经过加工分析,自动生成相应的报表,展示出来。

这个过程非常简单,总结起来无非就是一个数据的存储和读取的过程,本身并没有什么可以讨论的新东西。我们前面已经花几篇文章介绍过数据库的一些简单概念(天天鼓捣数据,你知道数据库长啥样吗?天天捣鼓数据库,知道什么是索引吗?),知道数据库其实就是一个存放数据的文件,程序员用一种叫SQL 的语言,往这个文件里添加、删除、修改和读取数据。SQL 语句我们也介绍过一些,它有点像用英语造句,非常接近我们说话的语气,反而不像是一门正儿八经的编程语言。例如:SELECT LastName,FirstName FROM Persons

问题就出在这儿。现在程序员写的代码,是用非常正经的面向对象语言写的,程序里的一切都是对象(五分钟理解什么是面向对象)。现在有一些数据,是以对象的形式在内存里存储的,现在需要把他们弄到数据库里,怎么办呢?

举个例子,有一个对象叫News,是一条新闻,它有几个属性,比如标题,正文,作者,时间等等。

class News

{

String title;

String content;

String author;

Date time;

}

同时,程序员为了把它存到数据库里,就在数据库中建了一个表也叫 News,表里有几个字段,正好对应 News 的属性。

那么如何把这个News 对象,插入到数据库里的 News 表中呢?程序上是这样做的。我们在程序里构造操作数据库的时候,会把 News 对象的所有属性,挨个读出来,拼接到 SQL 语句中。最后发送给数据库的 SQL 语句,就带上了 News 对象的所有信息。同理,读取数据的时候,一开始我们从数据库里读到的是一些零散的 News 属性,经过拼装,会重新生成一个 News 对象。

跟堆积木是一个道理。你堆起一个变形金刚,这就是一个对象,一块一块的积木它的所有属性。当你在面向对象的程序里使用它的时候,它就是以对象的形态存在的。当你需要存到数据库里的时候,就把它们拆开,以零散的积木的形式存起来。下次拿出来的时候,再拼装成对象。从对象变成 SQL 语句,或者从 SQL 语句变成对象,有一个专业的名词叫 ORM,意思是对象关系映射。

往往这个过程,又臭又长,是一些没有任何乐趣的类似 a=b 之类的代码,所以大家一般都去找现成的轮子(库)拿来用。这些轮子很厉害,你塞给它一个对象,告诉它要执行的操作,是增删还是改查,它就能把相应的 SQL 语句构造出来并发送给数据库执行,全自动的。

这其实也是写代码的一个套路。一开始大家想把对象存到数据库里,就自己一条一条的构造 SQL 语句,一条一条的操作数据库。后来有人发现这个过程是通用的,就抽象出来,做成一个 ORM 库。

以后谁在想做把对象存数据库的事情,只需要调用现成的 API 就行了,根本不用重复发明轮子。别的不说,Java 里面最有名的一个 ORM 当属 Hibernate 了,它的设计目标就是让程序员可以完全用面向对象的思维来操作数据库。当年 Java 后台正火的时候,程序员速成班里都在教用 SSH 搭建一个网站,其中的 H,就是指Hibernate,可见ORM 对程序员多重要。

但是数据库里的东西,要比对象复杂太多,它有各种关系,有各种约束。所以 ORM 并不能适应所有的情况,遇到一些复杂的 SQL,就只能眼睁睁看着了。所以说不要以为有了 ORM,程序员就只需要专心做好对象这一层面的东西就行,SQL 作为基本功,出了问题调试起来也方便。

总结一下。ORM 说白了就是让你能直接把对象存到数据库,也能直接从数据库读对象。中间它做了一些与 SQL 语言的适配处理,但已经被隐藏和封装起来了,外面不可见。程序员有了 ORM,只需要关心对象的东西,跟数据库对接的部分,它会自动帮你处理好。你看,站在别人的肩膀上,当个程序员其实挺简单的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码上通天地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值