Java 您多久编写一次新的SQL查询,还是尝试使用现有的SQL查询?

Java 您多久编写一次新的SQL查询,还是尝试使用现有的SQL查询?,java,c#,sql,database,oracle,Java,C#,Sql,Database,Oracle,我没有发现类似的问题。我想听听你的建议和意见 显然,最好使用只返回所需信息的查询。 如果我们使用一个更大的数据库,我们通常已经用不同的标准对每个表进行了大量查询,无论是简单的还是复杂的,或者是动态的 例如: SELECT * FROM transaction tr WHERE tr.progress_date = '?'; -- about 20 rows SELECT SUM(tr.amount) FROM transaction tr WHERE tr.progress_date = ?

我没有发现类似的问题。我想听听你的建议和意见

显然,最好使用只返回所需信息的查询。 如果我们使用一个更大的数据库,我们通常已经用不同的标准对每个表进行了大量查询,无论是简单的还是复杂的,或者是动态的

例如:

SELECT * FROM transaction tr WHERE tr.progress_date = '?'; -- about 20 rows
SELECT SUM(tr.amount) FROM transaction tr WHERE tr.progress_date = ? AND tr.sender = ?;
SELECT * FROM transaction tr WHERE tr.progress_date = '?'; -- about 20 rows

|
V

double sum = transactions.stream().mapToDouble(t -> t.getAmount()).sum();
但是,当我们需要从数据库中获取特定信息时。 您是否总是为该案例编写新的查询? 例如:

SELECT * FROM transaction tr WHERE tr.progress_date = '?'; -- about 20 rows
SELECT SUM(tr.amount) FROM transaction tr WHERE tr.progress_date = ? AND tr.sender = ?;
SELECT * FROM transaction tr WHERE tr.progress_date = '?'; -- about 20 rows

|
V

double sum = transactions.stream().mapToDouble(t -> t.getAmount()).sum();
或者使用一些现有的(如果类似的话)并且不返回更多的数据,再加上在后端进行额外的简单过滤或搜索?例如:

SELECT * FROM transaction tr WHERE tr.progress_date = '?'; -- about 20 rows
SELECT SUM(tr.amount) FROM transaction tr WHERE tr.progress_date = ? AND tr.sender = ?;
SELECT * FROM transaction tr WHERE tr.progress_date = '?'; -- about 20 rows

|
V

double sum = transactions.stream().mapToDouble(t -> t.getAmount()).sum();
请注意,它不是一个小软件,通常会出现一种新情况,即只需要一个特定案例的一些信息


假设数据没有缓存,并且是Oracle、Postgres或MySql数据库

您希望RDBMS在查询大型表时承担繁重的工作。显然,总是使用带有参数的PreparedStatement,并在需要时索引或执行联接

对于小数据集,即20行示例,在Java代码中执行过滤/处理是可以接受的,有时可能是一个优势,因为不同的Java方法可以使用一个查询


我和我会采用混合方法,当性能差异明显时,可以选择稍后使用专用SQL查询重构内存中的Java过滤。

您是否考虑过使用类似Hibernate的ORM?如果您要反复使用查询,但参数不同,我将使用存储过程。@azurefrog当前项目不使用Hibernate。但是如果我使用Hibernate,问题是相同的。我们也使用过程。试想一下,经常为特殊情况更改和添加参数会变成难以维护的代码和不清晰的代码吗?同样的问题是,这些查询都是过程。修改一个现有的,添加一个新的,或者使用一个带有后端处理的现有的?我正在写一个答案,建议数据库视图,可能还有JPA entities+QueryDSL或者一组简单的JDBC查询,但是在我提交答案之前,过于热心的常客们解决了这个问题。简言之,这要视情况而定。