遵循 JDBC 的应用程序应该将 SQL 语句存储在哪里? 为什么?
到目前为止,我设法确定了这些选项:
- 业务对象中的硬编码
- 嵌入在 SQLJ子句中
- 封装在不同的类中。
数据访问对象
- 元数据驱动(解耦对象)
来自数据架构的架构-
描述它们之间的映射
元数据)
- 外部文件(例如
资源档案)
- 存储过程
每个问题的“优点”和“缺点”是什么?
SQL 代码应该被认为是“代码”还是“元数据”?
存储过程应该只用于性能优化,还是应该是数据库结构的合法抽象?
性能是决定性的关键因素吗? 供应商锁定呢?
什么是更好的-松散耦合或紧密耦合,为什么?
编辑: 感谢大家的回答——以下是摘要:
元数据驱动,即对象关系映射(ORM)
优点:
- 非常抽象-数据库服务器可以
而不需要改变
模特
- 分布广泛,几乎是标准
- 减少所需的 SQL 数量
- 可以在资源文件中存储 SQL
- 性能(通常)是可以接受的
- 元数据驱动方法
- (数据库)供应商独立性
缺点:
- 隐藏 SQL 和真正的开发人员
意图
- SQL 难以检查/更改
作者: DBA
- 奇数可能仍然需要 SQL
案件
- 可以强制使用专有的
查询语言,例如 HQL
- 不适合优化
(抽象)
- 缺乏参照完整性
- 代替缺乏 SQL 知识
或者不注意数据库中的代码
- 从来不匹配本地数据库
表现(即使很接近)
- 模型代码与
数据库模型
DAO 层硬编码/封装
优点:
- SQL 保存在
访问数据(封装)
- SQL 易于编写(速度
发展)
- SQL 在以下情况下很容易追踪到
必须作出改变
- 简单的解决方案(没有混乱
建筑)
缺点:
- 数据库管理员不能检查/更改 SQL
- SQL 很可能成为特定于 DB 的
- SQL 可能变得难以维护
存储过程
优点:
- 保存在数据库中的 SQL (接近
资料)
- SQL 被解析、编译和优化
数据库管理系统
- SQL 对于 DBA 来说很容易查看/更改
- 减少网络流量
- 加强了安保
缺点:
- SQL 绑定到数据库(供应商
锁定)
- SQL 代码更难维护
外部文件(例如属性或资源文件)
优点
- SQL 可以不需要更改
重建应用程序
- 对象解耦 SQL 逻辑
应用业务逻辑应用业务逻辑
- 所有 SQL 的中央存储库
语句-更容易维护
- 更容易理解
缺点:
- SQL 代码可能变得不可维护
- 更难检查 SQL 代码
(语法)错误
嵌入在 SQLJ 子句中
优点:
缺点:
- 和 Java 联系太紧密了
- 性能低于 JDBC
- 缺乏动态查询
- 不怎么受欢迎