我们最喜欢通过编程语言与数据库进行交互的方式是什么?

时间:2020-03-05 18:39:00  来源:igfitidea点击:

有很多方法可以连接数据库层并与之交互。例如,在Java中,常见用法是原始SQL的JDBC调用,对象关系映射器,JDBCTemplate(Spring),存储过程等。

用语言,我们偏爱哪种选择,为什么?我们什么时候考虑其他人?

解决方案

回答

我更喜欢建立一个业务对象模型层(对象和对象的collecitons)。

我建立了与数据库交互到每个对象/集合的功能(对于SQL Server,我使用System.Data.SqlClient)。我已经将这种模式用于SQL Server,MySQL和Oracle。

然后,我与应用程序代码中的对象进行交互。

通过将数据库抽象为对象,无论后端数据库如何,我的应用程序代码都是一致的。

回答

每次进行ORM时,至少我必须考虑数据库的问题越多越好。

回答

LINQ是从这里开始为我服务的方式

回答

我真的很喜欢3 + 1层的做事方式。
UI的一层,业务逻辑的一层,以及持久化的数据。我们说的最后一个?域对象和接口。这样就可以加载任何一个或者两个主要层以及域"层",并且代码应该可以工作。

它在很大程度上依赖于依赖注入和控制反转原理。
数据/持久层仅做两件事。它创建,读取,更新和删除数据,并将其映射为域对象格式。

UI层则完全相反。它以用户可以关联的方式显示和接收数据,并将该输出映射到域对象格式或者从域对象格式映射到该输出。

业务逻辑层只需要知道一件事。商业逻辑。它不关心数据来自何处,也不关心数据层将数据放在何处。它知道应该标记刚刚透支的帐户,实际上如何做并不是真正的工作。

域对象本身没有任何逻辑,它们只是用于在层之间传递数据的容器。这意味着我们可以加载域对象和接口,而不必完全考虑依赖项。

归根结底,我觉得我的代码库非常清晰,各层明显分开。有了一些严格的接口和良好的基类,大多数编码只是告诉软件当X发生时该怎么做。只是应该如此。

</rant>

编辑:哦,是的。对于LINQ,SubSonic和其他ORM都是如此。

回答

ORM确实很棒。

我在python中使用SQL Alchemy时,它几乎可以与我遇到的每个DBMS一起使用。

对于MacOS X上轻量级数据驱动的应用程序,我使用Core Data,它具有出色的数据建模工具,可通过Xcode访问。

这些都表明ORM做得很好。我使用EJB的成功和享受较少。

回答

我还没有进入LINQ世界,但是我真的很喜欢Visual Studio通过XSD数据集完成的DataTable / TableAdapter类。通过在创建数据库架构后进行几次单击和单击,我现在有了一个具有强类型的DataSet / DataTable对象,并且有了一些适配器方法,这些方法对我的所有CRUD语句使用参数化查询到我的存储过程。它甚至会为未直接与表绑定的某些过程创建查询表适配器。

哦,如果我们还没有创建存储过程,而只是拥有表,那么向导将为我们创建过程或者即席SQL语句。

自Visual Studio 2005以来,这种情况就已经消失了,并且通过新的Web应用程序大大减少了我的"结构"时间,我可以将更多精力放在业务和表示逻辑上。

回答

在CI中,LINQ to SQL可以用于任何新事物,但是我真的很喜欢使用.netTiers + CodeSmith Generator在数据库中使用Con .NET 2.0获得快速而肮脏的数据层。

回答

到目前为止,Ruby on Rails的ActiveRecord可以将我看到的所有内容都抹掉。 LINQ在某些情况下看起来可能会更好,但是ActiveRecord是如此灵活。

回答

我非常喜欢休眠:)

我知道它具有学习曲线,但是一旦我们掌握了它,那就太好了。

不用说,我等不及要接触.NET 3.5 SP1中的新实体框架(我知道它已经可用,但是我有点懒于输入XML :))

回答

ActiveRecord,这是在Fowler的企业体系结构模式中首先记录的模式(我认为)。我相信它是用Ruby以外的语言实现的,尽管它是Rails中的核心技术。无论如何,它都是数据库的简洁抽象,尽管我不得不承认我发现它在find_by_sql区域中有些笨拙。但这可能只是我。

但是(现在戴上脾气暴躁的老人帽)世界上所有的ORM都不能代替对SQL的良好了解,没有它,我真的不希望看到完全允许对RDBMS的访问。

回答

当前,我们正在使用ODAC与Oracle数据库进行对话并使用许多Oracle软件包(PL / SQL)。 n层系统是通过RemObjects完成的,这意味着我们的客户端中没有任何SQL,只需要发送HTTP请求的能力,因此没有安装开销。

所有这些操作都是使用Borland Delphi完成的,并且在生产环境中已经工作了2年。

回答

我们使用一种混合方法,具体取决于哪种方法适合应用程序中的特定情况:

  • 当阅读页面上值得显示的信息并供用户更新时,我们使用Hibernate
  • 当处理一批更新或者汇总数据库中大多数数据的位置时(例如,一天结束时处理),我们使用PL / SQL(并尝试考虑集合)
  • 当用户执行搜索或者运行摘要报告时,我们使用ibatis sqlmaps建立一些SQL,并仅带回我们感兴趣的字段(不是每列,当然也没有任何不必要的子行,urggh)
  • 任何真正需要快速运行的方法,我们将使用最有效的方法

这是使用Java / Oracle的。

回答

我们通过Oracle.OleDBProvider使用Delphi和Oracle数据访问组件(ODAC)和ADO。

回答

可能最喜欢的方法是将Smalltalk与GemStone对象存储库一起使用。为什么?没有要处理的ORM问题。如果雇主强迫或者威胁,我只会考虑其他事情。

回答

我最喜欢的方法是拥有一个对象抽象层。理想情况下,这是仅适用于SQL的地方。但是实际上,对象有时也需要执行SQL-y事情。但是物体外没有任何东西。

到目前为止,我自己已经编写了这样的图层,因为可用的内容太尴尬,太慢或者太大。