Java - 将 SQL 语句存储在外部文件中 [英] Java - Storing SQL statements in an external file

查看:24
本文介绍了Java - 将 SQL 语句存储在外部文件中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在寻找在外部文件中存储 SQL 语句的 Java 库/框架/技术.支持团队(包括 DBA)应该能够(稍微)更改语句以在数据库架构更改或出于调整目的时保持同步.

I am looking for a Java library/framework/technique of storing SQL statements in an external file. The support team (including DBAs) should be able to alter (slightly) the statement to keep them in sync in case database schema changes or for tuning purposes.

以下是要求:

  • 该文件必须可从 Java 读取应用程序,但也必须是可编辑的由支持团队提供,无需花哨的编辑器
  • 理想情况下,文件应该是普通的文本格式,但 XML 也可以
  • 允许 DML 和 DDL 语句存储/检索
  • 可以在稍后阶段添加新语句(应用程序足够灵活,可以选择并执行它们)
  • 语句可以分组(并由应用程序作为一个组执行)
  • 语句应该允许参数

注意事项:

  • 一旦检索到,语句将使用 Spring 的 JDBCTemplate 执行
  • Hibernate 或 Spring 的 IOC 容器不会被使用

到目前为止,我设法找到了以下 Java 库,它们使用外部文件来存储 SQL 语句.但是,我主要对存储感兴趣,而不是隐藏所有 JDBC复杂性"的库.

So far, I managed to find the following Java libraries, which use external files for storing SQL statements. However, I am mainly interested in the storage rather than a library that hides all JDBC "complexities".

示例文件内容:

<s:query name="get_emp">
  <s:param name="name" type="string"/>
  <s:sql databases="oracle">
    select    *
    from      scott.emp
              join scott.dept on (emp.deptno = dept.deptno)
    where     emp.ename = <s:bind param="name"/>
  </s:sql>
</s:query>

  • iBATIS

    示例文件内容:

    <sqlMap namespace="Contact"">
        <typeAlias alias="contact"
            type="com.sample.contact.Contact"/">
        <select id="getContact"
            parameterClass="int" resultClass="contact"">
                select CONTACTID as contactId,
                       FIRSTNAME as firstName,
                       LASTNAME as lastName from
                       ADMINISTRATOR.CONTACT where CONTACTID = #id#
        </select>
    </sqlMap>
    <insert id="insertContact" parameterClass="contact">
    INSERT INTO ADMINISTRATOR.CONTACT( CONTACTID,FIRSTNAME,LASTNAME)
            VALUES(#contactId#,#firstName#,#lastName#);
     </insert>
    <update id="updateContact" parameterClass="contact">
    update ADMINISTRATOR.CONTACT SET
    FIRSTNAME=#firstName# ,
    LASTNAME=#lastName#
    where contactid=#contactId#
    </update>
    <delete id="deleteContact" parameterClass="int">
    DELETE FROM ADMINISTRATOR.CONTACT WHERE CONTACTID=#contactId#
    </delete>
    

  • WEB4J

    -- This is a comment 
     ADD_MESSAGE   {
     INSERT INTO MyMessage -- another comment
      (LoginName, Body, CreationDate)
      -- another comment
      VALUES (?,?,?)
     }
    
    -- Example of referring to a constant defined above.
    FETCH_RECENT_MESSAGES {
     SELECT 
     LoginName, Body, CreationDate 
     FROM MyMessage 
     ORDER BY Id DESC LIMIT ${num_messages_to_view}
    }
    

  • 谁能推荐一个经过试验和测试的解决方案?

    Can anyone recommend a solution that is tried and tested?

    推荐答案

    只需创建一个简单的 Java 属性文件,其中包含如下所示的键值对:

    Just create a simple Java Properties file with key-value pairs like this one:

    users.select.all = select * from user
    

    在您的 DAO 类中声明一个属性类型的私有字段,并使用 Spring 配置注入它,该配置将从文件中读取值.

    Declare a private field of type Properties in your DAO class and inject it using Spring configuration which will read the values from the file.

    UPDATE:如果您想支持多行的 SQL 语句,请使用此表示法:

    UPDATE: if you want to support SQL statements in multiple lines use this notation:

    users.select.all.0 = select *
    users.select.all.1 = from   user
    

    这篇关于Java - 将 SQL 语句存储在外部文件中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆