当前位置: 首页 > 面试题库 >

使用Spring JDBC时长久(+20行sql)外在化的干净方法吗?

吕嘉荣
2023-03-14
问题内容

我想将我的应用程序中的一些大型查询外部化为properties \ sql \ xml文件。但是,我想知道是否有人对如何以一种干净的方式实现此目标有一些建议。大多数结果建议使用ORM框架,但由于某些数据限制,此方法不适用。

我看了一下:Java-将SQL语句存储在一个外部文件中,但是对一些查询使用此属性名.1,.2等,每条查询的长度都超过20行,这似乎不太干净。


问题答案:

您可以将查询放入xml文件中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">

<properties>
<entry key="getPersonById">
    <![CDATA[
        Select Name From Person 
        Where Id =?     
    ]]>

</entry>    
<entry key="getPersonBySSN">
    <![CDATA[

    ]]>
</entry>

</properties>

在Spring应用程序上下文中,加载此xml文件

<bean id="queryProps" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="locations" value="classpath:/queries.xml" />
</bean>

在您的DAO类中注入这个bean

<bean id="myDAO" class="com.xyz.dao.MyDAOImpl">
  <property name="queryProps" ref="queryProps" />
</bean>

在您的DAO类中定义queryProps,不要忘记为此使用setter方法

 private Properties queryProps;

现在,您可以像这样在DAO中访问查询-

 String query = queryProps.getProperty("getPersonById");

希望这可以帮助。



 类似资料:
  • TLDR:由于UserNotFound错误(未找到的用户来自旧安装),我无法使用空数据目录启动Mongo的干净安装(从ZIP)。 更详细地说:我最初的Mongo数据库运行良好。出于测试目的,我移动了当前的数据目录,并创建了一个新目录。所以我停止了运行Windows服务 创建一个新的数据目录并尝试在noauth模式下启动一个新的MongoDB 麻烦就从这里开始了:MongoDB试图从我的旧数据库中连

  • 问题内容: 我对某些外部jar具有运行时依赖性,因此我希望将这些外部jar重新“打包”成单个jar。这些外部依赖项存储在external_jars目录中,我希望不必将它们全部列出(即,如果我的依赖项发生更改,则无需更改构建脚本)。有什么想法吗? 粗略地讲,我需要遵循以下内容,它将lib目录中的所有jar组合到out.jar中(带有一些合理的覆盖规则)。 问题答案: 只需与Ant Zip任务一起使用

  • 问题内容: 顾名思义,是否有适当的方法来设置一些初始CSS属性(或类),并告诉浏览器将其转换为另一个值? 这不会激活Chrome 29 / Firefox 23中元素的不透明度。这是因为(源): […]您会发现,如果同时应用两组属性,则立即应用一组属性,然后浏览器将尝试优化属性更改,而忽略您的初始属性并防止过渡。在幕后,浏览器在绘画之前先批处理属性更改,这通常会加快渲染速度,但有时可能会产生不利影

  • 问题内容: 我们有一个面向对象的代码库,在很多情况下,它们根本不起作用,主要是由于以下原因: 除非您愿意放弃面向对象抽象的好处,否则没有办法在扩展扩展实例化类和添加值组件的同时保留平等合同。 这是来自约书亚·布洛赫(Joshua Bloch)的“有效Java”的引文,Artima上一篇出色的文章中有关于该主题的更多信息: http://www.artima.com/lejava/articles/

  • 问题内容: 一个没有stopServer功能的RMI服务器,可以正常工作。 每当被调用异常中的stopServer()抛出时 这是堆栈跟踪 即使我使用清理服务对象,情况也一样 有人可以提出一种干净的方法来停止服务器,这还会释放端口以供重用。 问题答案: 您需要存储结果并取消导出结果。目前,您正在尝试取消导出存根。

  • 问题内容: 我使用并不少。 这是以下示例输出: 今天,我只需要在脚本中检索uwsgi 的 主进程 (因此我只需要15237,而不想要15293或15294)。 从今天开始,我尝试了一些……但是我想要一种 更清洁的方法 。 我还遇到了unix.com论坛中的另一种解决方案: 但是仍然有 很多管道 和 丑陋的招数 。 真的没有选择或更巧妙的技巧(也许使用 awk )来完成该任务吗? 问题答案: 与@n