关闭。这个问题需要更多 focused 。它目前不接受答案。




2年前关闭。










锁定。这个问题及其答案是 locked 因为这个问题是题外话但具有历史意义。它目前不接受新的答案或互动。








有人建议我将 ORM 用于我正在设计的项目,但我无法找到有关它是什么或如何工作的信息。

谁能给我一个关于 ORM 是什么、它是如何工作的以及我应该如何开始使用 ORM 的简要说明?

最佳答案

介绍

Object-Relational Mapping (ORM) 是一种技术,可让您使用面向对象的范例从数据库中查询和操作数据。在谈论 ORM 时,大多数人指的是实现对象关系映射技术的库,因此称为“ORM”。

ORM 库是用您选择的语言编写的完全普通的库,它封装了操作数据所需的代码,因此您不再使用 SQL;您直接与使用相同语言的对象进行交互。

例如,这是一个使用伪语言的完全虚构的案例:

你有一个书籍类,你想检索作者是“Linus”的所有书籍。手动,你会做这样的事情:

book_list = new List();
sql = "SELECT book FROM library WHERE author = 'Linus'";
data = query(sql); // I over simplify ...
while (row = data.next())
{
     book = new Book();
     book.setAuthor(row.get('author');
     book_list.add(book);
}

使用 ORM 库,它看起来像这样:
book_list = BookTable.query(author="Linus");

机械部分通过 ORM 库自动处理。

利弊

使用 ORM 节省了大量时间,因为:
  • DRY :您只在一处编写数据模型,并且更容易更新、维护和重用代码。
  • 很多东西都是自动完成的,从数据库处理到 I18N
  • 它迫使你编写 MVC 代码,这最终会让你的代码更简洁一些。
  • 您不必编写格式不佳的 SQL(大多数 Web 程序员真的很讨厌它,因为 SQL 被视为一种“子”语言,而实际上它是一种非常强大和复杂的语言)。
  • sanitizer ;使用准备好的语句或事务就像调用一个方法一样简单。

  • 使用 ORM 库更灵活,因为:
  • 它适合您的自然编码方式(这是您的语言!)。
  • 它抽象了 DB 系统,因此您可以随时更改它。
  • 该模型与应用程序的其余部分弱绑定(bind),因此您可以更改它或在其他任何地方使用它。
  • 它让您可以毫不费力地使用 OOP 的优点,例如数据继承。

  • 但 ORM 可能会很痛苦:
  • 你要学会它,ORM库不是轻量级工具;
  • 你必须设置它。同样的问题。
  • 对于普通查询,性能还可以,但是对于大型项目,SQL 大师使用自己的 SQL 总是会做得更好。
  • 它抽象了数据库。虽然如果您知道幕后发生的事情是可以的,但对于可以编写非常贪婪的语句(例如 for 循环中的重击)的新程序员来说,这是一个陷阱。

  • 如何学习ORM?

    嗯,用一个。无论您选择哪个 ORM 库,它们都使用相同的原则。这里有很多 ORM 库:
  • Java:Hibernate
  • PHP:PropelDoctrine(我更喜欢最后一个)。
  • Python:Django ORM 或 SQLAlchemy(我最喜欢的 ORM 库)。
  • C#:NHibernateEntity Framework

  • 如果您想在 Web 编程中尝试使用 ORM 库,最好使用整个框架堆栈,例如:
  • Symfony(PHP,使用 Propel 或 Doctrine)。
  • Django(Python,使用内部 ORM)。

  • 不要尝试编写自己的 ORM,除非您想学习一些东西。这是一项巨大的工作,旧的工作需要花费大量的时间和工作才能变得可靠。

    关于database - 什么是 ORM,它是如何工作的,我应该如何使用它?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1279613/

    10-13 09:19