在 Java 中如何更高效地存儲和管理 SQL 語句?

【編者按】還在爲管理 Java 代碼中的 SQL 語句而煩惱嗎?讓 Zemian 幫你擺脫困境吧!本文系 OneAPM 工程師編譯整理html

**注意:**使用java.util.Properties#loadFromXML其實會更簡單!java

在 Java 中如何更高效地存儲和管理 SQL 語句?

若是使用的是普通的、沒有任何外部類庫的 Java JDBC,那麼就必須得本身去管理 SQL 語句。很不幸的是,Java String 並不支持多行結構,因此開發者必須使用許多引號+鏈接符來拼接語句,這會使得 SQL 語句很是難於閱讀和管理。同時,這也使得維護和測試(嘗試從 Java 代碼中 Copy 一條 SQL 語句到 SQL 客戶端運行)更加困難。若是能保證整條 SQL 語句無缺完好,又避免了 Java 的干擾,那該有多好啊!sql

這裏有個快速解決方案,把 SQL 查詢語句存儲在 XML 的 CDATA 裏面:服務器

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sqlMap>
    <sqls>
        <entry>
            <key>getUser</key>
            <value><![CDATA[
SELECT *
FROM USERS
WHERE ID = ?
            ]]></value>
        </entry>
        <entry>
            <key>getSpecialCodeByUserId</key>
            <value><![CDATA[
SELECT u.EMAIL, p.ID as PROFILEID, p.SPECIALCODE, a.MANAGERID
FROM USERS u
  LEFT JOIN PROFILE p ON p.USERID = u.ID
  LEFT JOIN ACCOUNT a ON a.PROFILEID = p.ID
WHERE u.ID = ?  ]]></value>
        </entry>  </sqls>
</sqlMap>

若是如今再去讀 SQL 語句,開發者能夠利用內建的 JAXB。性能

import javax.xml.bind.annotation.XmlRootElement;
import java.util.HashMap;
import java.util.Map;
@XmlRootElement
public class SqlMap {
    Map<String, String> sqls = new HashMap<>();
    public Map<String, String> getSqls() {
        return sqls;
    }
    public void setSqls(Map<String, String> sqls) {
        this.sqls = sqls;
    }
    public String getSql(String name) {
        return sqls.get(name);
    }
    public static SqlMap load(String name) throws Exception {
        String xml = Utils.loadString(name);
        SqlMap sqlMap = unmarshallXML(xml );
        return sqlMap;
    }
}

原文連接:How to Store and Manage SQL Statements More Effectively With Java測試

OneAPM for Java 可以深刻到全部 Java 應用內部完成應用性能管理和監控,包括代碼級別性能問題的可見性、性能瓶頸的快速識別與追溯、真實用戶體驗監控、服務器監控和端到端的應用性能管理。想閱讀更多技術文章,請訪問 OneAPM 官方博客this

相關文章
相關標籤/搜索