ang*_*son 253
一个简单的答案是,您使用编程语言将表或存储过程包装在类中,这样您就可以使用对象的方法和属性来代替编写SQL语句来与数据库进行交互.
换句话说,而不是像这样的东西:
String sql = "SELECT ... FROM persons WHERE id = 10"
DbCommand cmd = new DbCommand(connection, sql);
Result res = cmd.Execute();
String name = res[0]["FIRST_NAME"];
Run Code Online (Sandbox Code Playgroud)
你做这样的事情:
Person p = repository.GetPerson(10);
String name = p.FirstName;
Run Code Online (Sandbox Code Playgroud)
或类似的代码(这里有很多变化.)一些框架也将很多代码作为静态方法放在类本身上,这意味着你可以做这样的事情:
Person p = Person.Get(10);
Run Code Online (Sandbox Code Playgroud)
有些还实现了复杂的查询系统,因此您可以这样做:
Person p = Person.Get(Person.Properties.Id == 10);
Run Code Online (Sandbox Code Playgroud)
该框架使这段代码成为可能.
现在,好处.首先,您将SQL隐藏在逻辑代码之外.这样做的好处是可以让您更轻松地支持更多的数据库引擎.例如,MS SQL Server和Oracle在典型函数上有不同的名称,以及使用日期进行计算的不同方法,因此查询"让我所有人在过去24小时内编辑"可能需要针对这两个数据库引擎的不同SQL语法.这种差异可以远离您的逻辑代码.
此外,您可以专注于编写逻辑,而不是让所有SQL正确.代码通常也更具可读性,因为它不包含与数据库通信所需的所有"管道".
Cod*_*eef 47
计算机软件中的对象关系映射(ORM,O/RM和O/R映射)是用于在关系数据库和面向对象的编程语言中的不兼容类型系统之间转换数据的编程技术.这实际上创建了可以在编程语言中使用的"虚拟对象数据库".虽然有些程序员选择创建自己的ORM工具,但有可用的免费和商业软件包可以执行对象关系映射.
为了提供可以在代码中使用的接口,抽象数据存储区(平面文件/ SQL /无论什么)是很好的.例如,(在rails中)而不是构造SQL来查找users表中的第一个用户,我们可以这样做:
User.first
Run Code Online (Sandbox Code Playgroud)
这将返回我们的用户模型的实例,其中包含users表中第一个用户的属性.
数据库通常用于关系模型:你有表(简化:像电子表格),以及它们之间的关系 - 一对一,一对多,多对多等等,这意味着例如一条记录表A在表B中有许多相关记录.您可以从它们中检索数据作为行(表示表/表中行的值的集合)更多内容在维基百科中.
现代编程语言使用对象模型.对象具有方法,属性(简单或复杂)等.
ORM软件在这些模型之间进行转换.例如,它将表B中的所有相关记录放入对象A的属性中.这种软件使得使用对象编程语言更容易使用关系数据库(最流行的类型).
每当你使用ORM(对象关系映射器)时,你会发现DBAL(数据库抽象层)并排.因此,有必要了解这些是什么,以便获得您正在使用的内容的良好见解,并了解您将获得的优势.
DBAL(数据库抽象层)
它充当代码和数据库之间的层.无论您的数据库是什么,编写的代码都可以通过微小的调整来正常工作.
假设对于当前项目,您使用MySQL一旦完全成熟并获得巨大流量,您的团队计划将数据库切换到Oracle由于某种原因,那么您在MySQL中编写的代码必须重写为基于Oracle的查询.重写整个项目的查询是一项繁琐的工作.
相反,如果您使用任何DBAL库,那么您可以切换数据库的配置,并确保您的项目将在一天内启动并运行(可能需要进行一些小的调整).
ORM(对象关系映射器)
对象关系映射(ORM)是一种从面向对象的语言访问关系数据库的技术(设计模式).
如果您使用过任何类型的框架,如Symfony(如果您来自PHP背景)/ Hibernate(Java),那么您熟悉这些.它只不过是实体.
为了在面向对象的上下文和接口中访问数据库,需要转换对象逻辑,此接口称为ORM.它由对象组成,可以访问数据并保持业务规则.
例如.
class User{
private $email;
private $password;
public function setEmail($email){
$this->email = $email;
return $this;
}
public function getEmail(){
return $this->email;
}
public function setPassword($password){
$this->password = $password;
return $this;
}
public function getPassword(){
return $this->password;
}
}
/* To save User details you would do something like this */
$userObj = new User();
$userObj->setEmail('sanitizedEmail');
$userObj->setPassword('sanitizedPassword');
$userObj->save();
/* To fetch user details you would do something like this */
$userObj = new User();
$userDetails = $userObj->find($id);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
85904 次 |
最近记录: |