- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有多个查询,其中我将执行一些任务。
例如:
<pre>
select * from test
where something
if check A
if check B
if check C
compare something.
For one table.
</pre>
同样,我对不同的表有许多其他查询。
<pre>
select * from test
where something
if check A
if check B
if check C
compare something.
</pre>
currently i am using reference.
select * from test
where something
<pre>
<include refId="test"/>
</pre>
<sql id="test">
if check A
if check B
if check C
compare something
</sql>
还有其他更好的方法吗?查询的返回类型也是 HashMap 。
我想知道我们是否可以创建一个函数或方法,我们可以将一些值作为列名或行名传递,然后执行以下操作而不是编写多个查询?
更多信息:事实上,我正在寻找一种方法来编写一次查询并一直使用它而无需多次输入,正如我之前告诉你的那样我目前正在使用引用来做到这一点。但我正在寻找一种不需要使用不同的选择语句然后调用 include 标记的方法。相反,我想编写一个函数,我可以将表名或列名从 java Controller 类传递到 xml 或查询文件。所以它可以接受这些值,然后考虑这些输入并采取相应的行动。
像上面一样,我必须从不同的表中执行或提取详细信息,但所有查询中的条件几乎相同。所以我想创建一个函数,我可以在其中发送表,从哪里选择和选择什么,然后条件应该是通用的,我可以在其中传递值,然后它应该为所有人完成工作。
示例代码:
<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 >= #{admissionDate}
</if>
<if test="admissionDateThru !=null">
AND
FROM_DATE <= #{admissionDateThru}
</if>
<if test="dischargeDate !=null">
AND
THRU_DATE >= #{dischargeDate}
</if>
<if test="dischargeDateThru !=null">
AND
THRU_DATE <= #{dischargeDateThru}
</if>
</select>
这是一个查询,有一些条件。与此查询类似,有许多查询具有相同的 if 条件但不同的表。所以我想创建一个函数,我可以在其中传递值,并且该函数应该适用于所有具有相同条件的查询。
最佳答案
这是我见过许多人试图解决的问题。
我见过的一般模式是通过检查一组对象属性来动态创建 SQL 查询。有点像
UserSearchFilter filter = new UserSearchFlter().
filter.setFirstName("John");
filter.setJobTitle("CFO");
List<User> users = userDao.search(filter);
DAO 仅对每个已知属性使用 if 语句,如果检测到,则相应地添加 WHERE 子句。
这通常会在一段时间内运作良好。最终,性能调优变得很困难,因为代码中的路径太多了。
有时,特定的过滤器最好不是通过 where 子句来完成,而是通过子查询或内部连接条件来完成。有时,当且仅当使用特定过滤条件时,您需要有条件地连接其他表。有时,您需要使用 WITH
因子来提取一堆记录,然后稍后在您的查询中加入它们,这可能会表现得更好。
在这种情况下,您会希望每个条件都有一个单独的固定查询。
当然,现在,对每个小的一次性查询都可能对维护同样不利。我一直处于这两个方面,在那里我努力破译曾经优雅的代码,但由于条件的数量而变成了意大利面条代码,并且我在每个小区域都有相同的 SQL,没有重复使用。
就像生活中的大多数事情一样,您可以找到健康的平衡点。
关于java - mysql查询的复用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16188236/
本文书接上回《反DDD模式之关系型数据库》,关注公众号(老肖想当外语大佬)获取信息: 最新文章更新; DDD框架源码(.NET、Java双平台); 加群畅聊,建模分析、技术实
我里面有 VC 和一个 collectionView。所有管理 Collection View 的代码我都放在那个 VC 的扩展中。但现在我需要在另一个不同的 VC 中使用这个 Collection
我很难重新使用子机图。 我需要重新使用我已链接到一个状态的状态机作为子机,在另一个状态中作为子机。但是当我给出对它的引用时,我得到一个空指针异常。 引用图片 我已经添加了对 GeneralTopup
我想尝试 lambda 的一些功能,并想编写一个 ArrayList 过滤器,并使用 IntStream 的方法来计算 ArrayList 中数字的平均值和最大值 我的第一个想法是过滤 ArrayLi
我正在开发一个 NodeJS 应用程序并使用 Mocha 进行单元测试。 假设我有两个非常相似的测试服。事实上,这些是针对两个类的测试实现相同的接口(interface)。 例如: suit_a.js
我正在使用 Glade 编写带有对话框的 python GUI。 如果我不使用 Glade,我会使用一个类来创建一个对话窗口 (dialag),运行它 (dialog.run),执行它所做的任何事情,
我在使用自定义单元格创建 UICollectionView 以显示项目时遇到问题。但是在 UICollectionView 刷新后,可重用的单元格填充了错误的索引 刷新前的 UICollectionV
我从 Sencha 学习 ExtJS 并有下一个简单的任务: 我的页面上有 2 个 div 在第一个 div 中我渲染 Ext.Button 在按钮上单击我想将其移动到另一个 div 仅此而已 我写了
我想在不同的 Node 模块中重用 RabbitMQ channel 。由于 channel 是异步创建的,我不确定将此 channel 对象“注入(inject)”到其他模块的最佳方法是什么。 如果
所以我的问题是我收到一个 SIGABRT 错误,其定义如下: *** Terminating app due to uncaught exception 'NSInvalidArgumentExcep
我正在编写一个 PHP 脚本来将主题从旧论坛站点迁移到新站点。 旧论坛站点使用数据库“old_forums” 新论坛站点使用数据库“new_forums” MySQL 用户“forums”拥有两个数据
我有一个使用 jcodec 生成的 MP4 文件。 然后我就有了一个使用 Android 的 MediaCodec 生成的 AAC 文件。 我想将它们混合到一个文件中,并且由于我不想将我的 Andro
我正在使用 ffmpeg 开发一个 c++ 项目。我必须生成一个带有 h264 编码的 mp4 文件。 我的问题是文件生成但是当用 VLC 读取文件时我没有图像,并用 ffprobe 分析它给我(下面
我将尝试重新提出这个问题。 我想要做的是创建一个新的 mp4 文件,其中将包括一个视频文件、两个音频文件和一个字幕文件。我想创建一个可以在我的 iOS 设备和计算机上播放的 mp4 文件。 文件如下:
虽然我的问题可能看起来很抽象,但我希望不是。假设我开发了一个应用程序,一个 ASP.NET MVC 站点,然后我的任务是为这个应用程序构建一个 Winforms 客户端,我可以从现有应用程序中重用多少
我是一名优秀的程序员,十分优秀!