JDBC兼容的应用程序应该在哪里存储其SQL语句,为什么?

到目前为止,我设法找出了这些选项:

>在业务对象中进行硬编码

>嵌入在SQLJ条款中

>封装在单独的类中,例如

Data Access Objects

>元数据驱动(解耦对象

模式从数据模式 –

描述它们之间的映射

元数据)

>外部文件(例如属性或

资源文件)

>存储过程

每个人的“优点”和“缺点”是什么?

SQL代码应该被视为“代码”还是“元数据”?

存储过程只能用于性能优化还是它们是数据库结构的合法抽象?

性能是决定的关键因素吗? vendor lock-in怎么样?

什么是更好 – 松耦合或紧耦合为什么?

EDITED:谢谢大家的答案 – 这里是一个总结:

元数据驱动,即对象关系映射(ORM)

优点:

>非常抽象 – DB服务器可以

切换而不需要更改

该模型

>广泛 – 几乎是一个标准

>减少所需的SQL量

>可以在资源文件中存储SQL

>性能(通常)可接受

>元数据驱动方法

>(数据库)供应商独立性

缺点:

>隐藏SQL和真正的开发人员

意图

> SQL难以审查/更改

由DBA

> SQL可能仍然需要奇数

病例

>可以强制使用专有

查询语言HQL

>不适合优化

(抽象)

>可以缺少参照完整性

>替代缺乏SQL知识

或缺乏在DB中编码的关心

>从不匹配本机数据库

性能(即使它接近)

>模型代码非常紧密配合

数据库模型

硬编码/封装在DAO层

优点:

> SQL保存在对象中

访问数据(封装)

> SQL很容易写(速度

发展)

> SQL很容易跟踪时

需要更改

>简单的解决方案(没有凌乱

建筑)

缺点:

> DBA无法审核/更改SQL

> SQL很可能成为DB特定的

> SQL可能会变得难以维护

存储过程

优点:

> SQL保存在数据库中(接近

数据)

> SQL被解析,编译和优化

由DBMS

> SQL很容易让DBA审查/更改

>减少网络流量

>增强安全性

缺点:

> SQL绑定到数据库(vendor

锁定)

> SQL代码更难维护

外部文件(例如属性或资源文件)

优点

> SQL可以更改而不需要

重建应用程序

>将SQL逻辑从

应用程序业务逻辑

>所有SQL的中央存储库

语句 – 更容易维护

>更容易理解

缺点:

> SQL代码可能变得不可维护

>很难检查SQL代码

(语法)错误

嵌入在SQLJ子句中

优点:

>更好的语法检查

缺点:

>绑定太接近Java

>低于JDBC的性能

>缺乏动态查询

>不那么受欢迎