Java 使用字符串生成器或存储过程进行单行选择

Java 使用字符串生成器或存储过程进行单行选择,java,sql,jdbc,plsql,Java,Sql,Jdbc,Plsql,在我的应用程序中,有很多单行select查询,其中包含跨越5-6个表的多个联接。这些查询是基于许多条件生成的,这些条件基于使用字符串生成器的表单等的输入。然而,我的团队负责人碰巧是一名sql开发人员,他要求我将这些单行查询转换为存储过程 将单行select查询转换为后端并以SP的形式执行所有if和else查询是否有任何好处。恐怕这是一个基于许多不同个人意见的问题,会导致许多不同的答案 您在这里讨论的业务逻辑在任何情况下都属于应用层。但是我知道很多Oracle开发人员完全不同意我的观点。将所有sq

在我的应用程序中,有很多单行select查询,其中包含跨越5-6个表的多个联接。这些查询是基于许多条件生成的,这些条件基于使用字符串生成器的表单等的输入。然而,我的团队负责人碰巧是一名sql开发人员,他要求我将这些单行查询转换为存储过程


将单行select查询转换为后端并以SP的形式执行所有if和else查询是否有任何好处。

恐怕这是一个基于许多不同个人意见的问题,会导致许多不同的答案


您在这里讨论的业务逻辑在任何情况下都属于应用层。但是我知道很多Oracle开发人员完全不同意我的观点。

将所有sql部分都包含在存储过程中的一个优点是,您可以将查询保存在一个地方,即数据库中,这样就可以更轻松地更改或修改,而无需在应用程序层或前端层进行大量更改

此外,如果SQL存储在数据库过程中,DBA或SQL开发人员还可以对SQL进行微调。您可以将所有函数/存储过程保存在一个包中,这样在性能和组织对象方面会更好(类似于在Java中创建包的方式)。当然,在包中,您可以限制对其对象的直接访问

这更多的是团队或部门的策略,在这里保留sql部分,无论是在前端还是在数据库本身,当然像@Gimby提到的,许多人可能有不同的观点

更新1


如果您有一个select语句,它返回使用函数的内容,如果您有INSERT/UPDATE/DELETE或类似的东西,比如发送电子邮件或其他业务规则,那么就使用一个过程并通过传递参数从前端调用这些内容。

如果您在java中使用PreparedStatement,那么这两个语句之间的性能没有很大差异 java查询和存储过程。(如果您使用java中的use语句,那么您的代码就有问题)


但存储过程是组织和重用sql代码的好方法。您可以在包中对它们进行分组,您可以在不进行java编译的情况下对它们进行更改,您的DBA或SQL spetialist可以对它们进行调优。

对于多个SQL语句,这很好。但是如果它的单行查询是有意义的吗。当我必须检查用户是否在表单中输入值a或B,并在查询中相应地连接它时,请执行此操作。@AkhilKNambiar IMHO使用函数/过程并从前端调用。也许将来如果有人想修改,他们可以在函数或过程中进行修改,而不必接触应用程序代码。在数据库(存储过程)中测试这些条件有多困难?@HansKesting well这很难。但是,在跨5-6个表的长select语句的情况下,这会提高性能吗