Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java mysql查询的重用_Java_Mysql - Fatal编程技术网

Java mysql查询的重用

Java mysql查询的重用,java,mysql,Java,Mysql,我有多个查询,其中我将执行一些任务 例如: <pre> select * from test where something if check A if check B if check C compare something. For one table. </pre> <select id="searchPatientAdmissionByDates" resultType="hashMap" parameterType="hashMap">

我有多个查询,其中我将执行一些任务

例如:

<pre>
select * from test 
where something
if check A
if check B
if check C
compare something.
For one table.
</pre>
<select id="searchPatientAdmissionByDates" resultType="hashMap" parameterType="hashMap">
    SELECT COUNT(DISTINCT(admission_details.PATIENT_ID)) AS CASECOUNT
    FROM admission_details,patient
    WHERE
    admission_details.PATIENT_ID = patient.id
    <if test="admissionDate !=null">
        AND
        FROM_DATE &gt;= #{admissionDate}
    </if>
    <if test="admissionDateThru !=null">
        AND
        FROM_DATE &lt;= #{admissionDateThru}
    </if>
    <if test="dischargeDate !=null">
        AND
        THRU_DATE &gt;= #{dischargeDate}
    </if>
    <if test="dischargeDateThru !=null">
        AND
        THRU_DATE &lt;= #{dischargeDateThru}
    </if>
</select>
像wise一样,我对不同的表有许多其他查询

还有其他更好的方法吗。查询的返回类型也是一个哈希映射

我想知道我们是否可以创建一个函数或方法,在其中我们可以将一些值作为列名或行名传递,然后执行以下操作,而不是编写多个查询

更多信息: 实际上,我正在寻找一种方法来编写一个查询,一次使用它,而不必多次输入它,正如我之前告诉你的那样,我目前正在使用引用来实现这一点。 但是我正在寻找一种不需要使用不同的select语句然后调用include标记的方法。相反,我想编写一个函数,在这个函数中,我可以将表名或列名从java控制器类传递到xml或查询文件。因此,它可以摄取值,然后考虑这些输入并相应地采取行动。 像上面一样,我必须从不同的表中执行或提取细节,但在所有查询中条件几乎相同。 所以我想创建一个函数,在这里我可以发送表,从哪里选择,选择什么,然后条件应该是通用的,在这里我可以传递值,然后它应该为所有人做wrk

示例代码:

这是一个查询,有一些条件。与此查询类似,有许多具有相同if条件但不同表的查询。
所以我想创建一个函数,在这里我可以传递值,这个函数应该对所有具有相同条件的查询进行操作

这是我见过很多人试图解决的问题

我看到的一般模式是通过检查一组对象属性来动态创建SQL查询。有点像

DAO只对每个已知属性使用if语句,如果检测到,则相应地添加WHERE子句

这通常在一段时间内效果良好。最终,性能调优变得很困难,因为代码中有太多路径

有时,一个特定的过滤器最好不是通过where子句完成的,而是通过一个子查询或内部连接条件完成的。有时,当且仅当使用特定的筛选条件时,才需要有条件地联接其他表。有时,您需要使用WITH因子来提取一组记录,然后在稍后的查询中加入它们,这样可能会执行得更好

在这种情况下,您希望对每个条件都有一个单独的固定查询

当然,现在每一个单独的查询都会对维护造成同样的影响。我在这两个方面都做过,我努力破译过去是优雅的代码,但由于条件的数量太多而变成了意大利面代码,在每个小地方我都有相同的SQL,没有重复使用


就像生活中的大多数事情一样,你可以找到一个健康的平衡。

你可以使用case statement.Thnx来快速回答。请使用标记来识别你的编程语言和/或平台,以便知道答案的人能够找到问题。谢谢你的回答,我希望到目前为止,我可以继续使用引用,并尝试在需要使用这些条件的地方调用它。您可以重用一些查询。不要害怕去做。只是要小心,不要让代码变得如此灵活,以至于难以维护。
<select id="searchPatientAdmissionByDates" resultType="hashMap" parameterType="hashMap">
    SELECT COUNT(DISTINCT(admission_details.PATIENT_ID)) AS CASECOUNT
    FROM admission_details,patient
    WHERE
    admission_details.PATIENT_ID = patient.id
    <if test="admissionDate !=null">
        AND
        FROM_DATE &gt;= #{admissionDate}
    </if>
    <if test="admissionDateThru !=null">
        AND
        FROM_DATE &lt;= #{admissionDateThru}
    </if>
    <if test="dischargeDate !=null">
        AND
        THRU_DATE &gt;= #{dischargeDate}
    </if>
    <if test="dischargeDateThru !=null">
        AND
        THRU_DATE &lt;= #{dischargeDateThru}
    </if>
</select>
UserSearchFilter filter = new UserSearchFlter().
filter.setFirstName("John");
filter.setJobTitle("CFO");

List<User> users = userDao.search(filter);