【編者按】還在爲管理 Java 代碼中的 SQL 語句而煩惱嗎?讓 Zemian 幫你擺脫困境吧!本文系 OneAPM 工程師編譯整理html
**注意:**使用java.util.Properties#loadFromXML其實會更簡單!java
若是使用的是普通的、沒有任何外部類庫的 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