JDBC兼容的应用程序应该在哪里存储其SQL语句?为什么?
到目前为止,我设法确定了以下选项:
每个人的"优点"和"缺点"是什么?
SQL代码应该被视为"代码"还是"元数据"?
存储过程是否应仅用于性能优化,还是数据库结构的合法抽象?
性能是决定的关键因素吗?供应商锁定怎么样?
什么是更好的 - 松耦合或紧耦合,为什么?
编辑:谢谢大家的答案 - 这是一个总结:
元数据驱动即对象关系映射(ORM)
优点:
缺点:
硬编码/封装在DAO层中
优点:
缺点:
存储过程
优点:
缺点:
外部文件(例如属性或资源文件)
优点
缺点:
嵌入在SQLJ子句中 …
我想将我的应用程序中的一些大型查询外部化到properties\sql\xml文件中.然而,我想知道是否有人有一些关于如何以干净的方式实现这一点的建议.大多数结果建议使用ORM框架,但由于某些数据限制,这不适用.
我看了一下:Java - 在一个外部文件中存储SQL语句,但为一些查询执行这个属性名.1,.2等,每个查询都要长20行看起来不干净.
Spring JDBC模板中似乎没有命名查询支持.通过命名查询,我的意思是在java代码中按名称引用sql语句的工具,并将实际语句保存在某个配置文件中.
在没有开箱即用支持的情况下,我正在研究将sql语句保留在java代码之外的最佳方法.
以下是替代方案:
评论?
当我必须连接到数据库时,这是我经常遇到的问题; 如何将SQL与普通的java代码分开?我通常为数据库连接使用单独的类,但是,当每个数据库中有多个数据库和多个表时,总是很难100%这样做
例如,如果我们想将所有java SQL放在一个名为DBConnector.java的类中,那么我们如何针对不同的插入,删除,数据检索等进行一般编码?我认为理想的情况是所有SQL语句应该在同一个类中,并且应该与数据库应用程序范围内的不同类型的相同操作兼容,从而提供与其余代码的逻辑分离.
public void insertData (String db, String table, <Whatever Fields to be Inserted>)
{
//generic SQL INSERT statement and execution
}
public ResultSet retrieveData (String db, String table, <Whatever Fields Relevant>)
{
//generic retrieval of data
}
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这个目标?或者我们应该只为不同风格的插入,查询等添加功能?
谢谢!