对于我开发的一些应用程序(后来渐渐忘记了),我一直在编写纯SQL,主要用于MySQL。虽然我在python中使用过orm,比如SQLAlchemy,但我并没有坚持使用它们太久。通常是文档或复杂性(从我的角度来看)阻碍了我。
我是这样认为的:为了可移植性,使用ORM,如果只使用一种类型的数据库,则使用纯SQL。在开发需要数据库支持的应用程序时,我真的在寻找关于何时使用ORM或SQL的建议。
考虑到这一点,使用轻量级包装器来处理数据库不一致要比使用ORM好得多。
对于我开发的一些应用程序(后来渐渐忘记了),我一直在编写纯SQL,主要用于MySQL。虽然我在python中使用过orm,比如SQLAlchemy,但我并没有坚持使用它们太久。通常是文档或复杂性(从我的角度来看)阻碍了我。
我是这样认为的:为了可移植性,使用ORM,如果只使用一种类型的数据库,则使用纯SQL。在开发需要数据库支持的应用程序时,我真的在寻找关于何时使用ORM或SQL的建议。
考虑到这一点,使用轻量级包装器来处理数据库不一致要比使用ORM好得多。
当前回答
我用纯SQL表示读取,用ORM表示CUD。
性能是我一直关注的问题,尤其是在web应用程序中,但同时也关注代码的可维护性和可读性。为了解决这些问题,我编写了SqlBuilder。
其他回答
我知道这个问题很老了,但我想我应该在这里发布一个答案,以防有人像我一样遇到这个问题。orm已经走过了很长的路。其中一些实际上为您提供了两全其美的服务:提高开发效率并保持性能。
看看SQL Data (http://sqldata.codeplex.com)。它是c#的一个轻量级ORM,涵盖了所有基础。
供参考,我是SQL数据的作者。
使用像SQL一样工作的ORM,但提供编译时检查和类型安全。比如我最喜欢的:数据知识对象(披露:是我写的)
例如:
for (Bug bug : Bug.ALL.limit(100)) {
int id = bug.getId();
String title = bug.getTitle();
System.out.println(id +" "+ title);
}
完全流。易于设置(不需要定义映射-读取现有模式)。支持连接、事务、内部查询、聚合等。几乎可以用SQL做任何事情。从庞大的数据集(金融时间序列)一直到琐碎的数据集(Android),这一点都得到了证明。
我想和大家一起回答:“我们有一个中间立场!”
对于应用程序程序员来说,SQL是您可能想要控制的东西和您几乎肯定不想费心控制的东西的混合体。
我一直想要的是一个层(称之为DAL、ORM或microorm,我不介意哪个),它将负责完全可预测的决策(如何拼写SQL关键字,括号放在哪里,何时创建列别名,为一个包含两个浮点数和一个int的类创建哪些列……),同时让我负责SQL的高级方面,即如何安排join、服务器端计算、DISTINCTs、GROUP by、标量子查询等。
所以我写了一些这样的东西:http://quince-lib.com/
这是针对c++的:我不知道这是否是你正在使用的语言,但同样的,看看这个“中间地带”的样子可能会很有趣。
我用纯SQL表示读取,用ORM表示CUD。
性能是我一直关注的问题,尤其是在web应用程序中,但同时也关注代码的可维护性和可读性。为了解决这些问题,我编写了SqlBuilder。
没有“一刀切”的解决方案,对于“我是否应该使用an或/m”这个问题也是如此。”。
我会说:如果你必须写一个非常“数据”的应用程序/工具,没有太多的其他逻辑,那么我会使用纯SQL,因为SQL是这类应用程序的领域特定语言。
另一方面,如果我要编写一个包含大量“领域”逻辑的业务/企业应用程序,那么我将编写一个富类模型,它可以在代码中表达这个领域。在这种情况下,OR/M映射器可能会非常有用,因为它可以从您手中省去大量管道代码。