針對需求易變應用,結合 pureXML 存儲靈活性、iBatis 數據訪問適應性、BeanUtils/JiBX 動態類生成、XSLT 界面展示靈活性,構建高度靈活軟件框架。基於 XML 的應用劃分為:數據存儲層、數據訪問層、業務邏輯層、界面展示層。
高效原生 XML 存儲,支持 SQL/XQuery 雙引擎查詢,關系操作與工具全面兼容 XML,構建雙引擎數據庫基礎。
「半自動化」ORM,核心在 POJO 與 SQL/XQuery 映射。優勢:靈活映射定義,開發者編寫高效 SQL/XQuery,良好支持 XML 數據組織邏輯;映射文件中直接制定查詢語句,給予最大自由度。執行流程:SQL Map 創建 PreparedStatement → 映射參數 → 執行 → ResultSet 映射結果對象。

JiBX:高性能 XML 數據綁定框架,字節碼增強 + XML Pull Parsing,靈活綁定映射文件實現 XML ↔ Java 對象互轉。兩步驟:編譯綁定(binding compiler 生成類文件)、運行綁定(marshal/unmarshal)。
BeanUtils:Apache Commons 組件,封裝反射/內省 API,實現動態 Bean(LazyDynaBean),運行時動態添加屬性,支持屬性拷貝(淺拷貝)、Map/Indexed 訪問,提升開發效率。

XML 轉換語言,實現數據與表現解耦。同一 XML 應用不樣式表呈現不同形式,修改樣式表即可適應展示變更,提供高擴展性。XSL 包含 XSLT(轉換)、XPath(定位)、XSL-FO(格式化)。

用戶上傳/下載/編輯資源,資源種類繁雜、描述豐富,採用 XML 載體。業務流程:用戶動態定義模板錄入信息;編輯時個性化展示並接收新信息,需提供 Java 對象或存入數據庫。

pureXML 管理靈活 XML;iBatis 自由配置 XQuery 並映射結果對象;XSLT 按 Schema 結構個性化展示;編輯新描述時,BeanUtils 將界面信息加入 JiBX 生成的動態 JavaBean,供模塊使用或 JiBX marshal 存入數據庫。

<select id="selectInfo" parameterClass="Description" resultClass="Description">
SELECT INFO FROM DISCRIPTION WHERE ID=#id#
</select>
映射 POJO Description(id、info 属性)。
public String selectInfoByID(Serializable id) {
Reader reader = Resources.getResourceAsReader(resource);
SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
Description param = new Description();
param.setId(((Integer)id).intValue());
Description result = (Description)sqlMap.queryForObject("selectInfo", param);
return (result != null) ? result.getInfo() : null;
}
根據自定義模板結構編寫樣式表,通用形式遍歷 template/section/component/de 元素生成 HTML 表格:
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="https://www.w3.org/1999/XSL/Transform" xmlns:xsd="https://www.w3.org/2001/XMLSchema">
<xsl:output method="html" encoding="gb2312"/>
<xsl:template match="/">
<xsl:apply-templates select="/xsd:template/xsd:section"/>
</xsl:template>
<xsl:template match="xsd:section">
<table width="98%" class="xsltTable"><tr><td><b><xsl:value-of select="@caption"/></b></td></tr></table>
<xsl:apply-templates select="./xsd:component"/>
</xsl:template>
<xsl:template match="xsd:component">...</xsl:template>
<xsl:template match="xsd:de">...</xsl:template>
</xsl:stylesheet>