OpenHandX-Real 1.02
輕量級持久工具
2012-10-02
作者:彭明華
openhandx@foxmail.com
本文檔中的任何部分都不得以任何手段任何形式進行復制與傳播
目錄
1 前言
2 OpenHandX-real與主流ORM持久框架的比較
3 需求
4 名次解釋
5 主要特性
6 學習前提
7 JDBC支持
7.1 DeleteSupport
7.2 InsertSupport
7.3 UpdateSupport
7.4 ExecuteSupport
7.5 QuerySupport
7.6 SqlMapSupport
7.7 AbstractTableDAO
7.8 注意
8 SQL字段映射
9 SQLMAP支持
9.1 SQLMAP文件編寫
9.2 SQLMAP文件使用
10 SPRING支持
11 常用工具類
11.1 自動編號類
11.2 業務日志類
11.3 枚舉常量類
11.4 系統信息類
11.5 樹型結構類
11.5.1 COMMON樹型結構類
11.5.2 SEARCH樹型結構類
11.6 注意
12 OpenHandX所有項目介紹
1 前言
OpenHandX-real是一個小巧的JDBC輕量級封裝的工具包,其最核心的特性是查詢結果集、以及增、刪、改、按主鍵查詢的封裝。可以直接將查詢出來的結果集封裝成JavaBean、編輯表數據時自動匹配字段和數據類型,這就為開發者做了最枯燥乏味、最容易出錯的工作。還提供了spring的支持,由spring統一管理數據庫事務。除此之外還提供一些常用應用工具類,如:樹型結構類、枚舉常量類、業務日志類、系統信息類、業務編號類。
1.02版本后增加了數據庫的兼容性,支持SqlServer、Oracle、Sybase、MySql幾個主流數據庫,增加了AbstractTableDAO大大簡化對單表增刪改插的開發工作。真正實現零SQL零配置文件的數據庫開發。
2 OpenHandX-real與主流ORM持久框架的比較
首先主流ORM是一種比較優秀的框架,隨著面向對象的軟件開發方法發展而產生的,通過使用描述對象和數據庫之間映射的元數據,將java程序中的對象自動持久化到關系數據庫中,ORM實際上是對象-關系映射。
ORM優勢:
1、隱藏了數據訪問細節,“封閉”的通用數據庫交互,ORM的核心。他使得開發者的通用數據庫交互變得簡單易行,并且完全不用考慮SQL語句;
2、ORM使開發者構造固化數據結構變得簡單易行。在ORM年表的史前時代,開發者需要將對象模型轉化為一條一條的SQL語句,通過直連或是DB helper在關系數據庫構造開發者的數據庫體系。而現在,基本上所有的ORM框架都提供了通過對象模型構造關系數據庫結構的功能。
ORM缺點:
1、自動化映射和關聯管理,是犧牲性能代價,雖然有延遲加載技術,也存在N+1的困擾,并且延遲加載不能跨越到分布式部署的web層等問題;
2、雖然隱藏了數據層面的業務抽象,但并不能完全的屏蔽掉數據庫層的設計,并且無疑將增加學習成本;
3、對于復雜查詢,ORM仍然力不從心。雖然可以實現,但是不值的。
OpenHandX-real是在ORM優缺點中找一個平衡點,通過使用統一數據對象與數據庫數據之間自動轉換,將統一數據對象非常容易地持久化到關系數據庫中。OpenHandX-real也有兩大優點:
1、增、刪、改、按主鍵查詢操作的SQL本身不復雜,而且SQL性能沒有什么可優化的余地,即使優化也是關系數據庫本身索引和合理性。所以對于增、刪、改的操作,OpenHandX-Real自動完成SQL和數據的組裝并執行,開發者不用寫SQL和操作PreparedStatement;
2、相反對于列表查詢操作,隨著信息技術的不斷發展,要求越來越高,多表關聯查詢,翻頁查詢,性能優化的程度很大。因此對于查詢OpenHandX-Real直接通過SQL操作,由開發者自行決定SQL或數據庫的優化,因此可以他的性能完全可以做到最優。對于查詢結果集的返回由OpenHandX-Real工具自動完成,組裝翻頁數據,將開發成本降到最低;
OpenHandX-real的目的不是取代ORM框架,而是ORM框架的補充。為那些追求良好的性能、數據庫設計經驗豐富的人提供有力的支持。
3 需求
OpenHandX-Real 1.02需要:
l Java 5
l open-common1.04
l commons-lang-2.1
l commons-beanutils-1.7
l commons-logging-1.0.4
l spring2.0以上及相關(可選)
l db-derby-10.5.3.0 (可選)
l javassist3.3
4 名次解釋
l 數據對象:OpenHandX-common提供的單條數據存儲對象RecordVO、多條數據存儲對象RecordSetVO、PersistenceRecordSetVO、復合數據存儲對象MulripleVO
5 主要特性
l SQL生成和數據的組裝-自動生成增、刪、改、按主鍵查詢操作的SQL和數據的組裝, 使數據庫開發變得簡單易行;
l 查詢結果集封裝和持續優化的執行效率-允許開發者自己寫查詢SQL,SQL的效率完全控制在開發者手里,并能根據實際情況持續優化;
l 結果集的數據加工功能-結果集返回是RecordSetVO對象, RecordSetVO對象本身具有排序、分組、檢索、統計、不重復值等功能
l 海量數據的支持-集成了OpenHandX-common特有持久PersistenceRecordSetVO對象,能一次從數據庫中取出所有數據(只要應用服務器硬盤的剩余空間足夠大),取出這些海量數據不占當前應用服務器的內存;
l JDBC支持-由開發者自己管控數據庫連接、事務,充分發揮開發者的想象力,提供開發者的高自由度,剩下繁瑣的工作就由OpenHandX-real完成;
l 支持大數據對象-開發者只要提供InputStream和OutputStream接口對象就能讀取數據庫的BLOB和CLOB數據;
l SPRING支持-OpenHandX-real與Spring做了無縫的集成,由spring管理DAO和Service類、數據庫連接池、數據庫事務;
l XML的SQLMAP支持-OpenHandX-real提供輕巧的SQL管理功能,允許開發者將SQL保存在XML配置文件中,便于統一規范和管理;
l SQL字段映射-很多時候依靠OpenHandX-real自動字段匹配功能不能完成的工作時,如:數據對象多個字段對應數據庫中同一個字段時需要通過字段映射強制指定
l 常用工具類-OpenHandX-real提供了樹型結構類、常量類、業務日志類、系統信息類、業務編號類的DAO和Service的實現類,也分別提供了JDBC和spring的實現
6 學習前提
要用好OpenHandX-real首先要學會OpenHandX-common的數據對象,這方面資料請查看《OpenHandX-Common》的數據模型章節。
7 JDBC支持
OpenHandX-real JDBC支持類在open.real.jdbc下,分別提供了DeleteSupport數據刪除支持類、InsertSupport數據新增支持類、UpdateSupport數據更新支持類、QuerySupport數據查詢支持類、任意SQL執行支持類ExecuteSupport。
7.1 DeleteSupport
public static int delete(Connection cnn,String tableName,String condKey,Object value)
刪除符合一個條件的數據,經常用于刪除單主鍵的數據 |
public static int delete(Connection cnn,String tableName,RecordVO vo)
刪除符合一條條件的數據,經常用于刪除復合主鍵的數據 |
public static int delete(Connection cnn,String tableName,IRecordSetVO vo)
刪除符合多條條件的數據,經常用于多條數據 |
7.2 InsertSupport
public static int insert(Connection cnn,String tableName,RecordVO vo)
插入一條數據 |
public static int insert(Connection cnn,String tableName,IRecordSetVO vo,LargeObject... larges)
插入一條數據,支持BLOB或CLOB字段,其中larges[0]對應第一個字段,larges[1]對應第二個字段 |
public static int insert(Connection cnn,String tableName,IRecordSetVO vo)
插入多條數據 |
7.3 UpdateSupport
public static int update(Connection cnn,String tableName,IRecordSetVO rsvo,String... condNames)
修改多條數據,只更新rsvo里的字段,其他字段不更新,rsvo中與condNames的同名字段為條件值 |
public static int update(Connection cnn,String tableName,RecordVO vo,RecordVO cond)
更新一條數據,只更新vo里的字段,其他字段不更新,vo包含要更新的值,cond為條件值 |
public static int update(Connection cnn,String tableName,RecordVO vo,RecordVO cond,LargeObject... larges)
更新一條數據,只更新vo里的字段,其他字段不更新,vo包含要更新的值,cond為條件值, 支持BLOB或CLOB字段,其中larges[0]對應第一個字段,larges[1]對應第二個字段 |
public static int update(Connection cnn,String tableName,RecordVO vo,RecordVO cond)
更新一條數據,只更新vo里的字段,其他字段不更新,vo包含要更新的值,cond為條件值 |
public static int update(Connection cnn,String tableName,RecordVO vo,String... condNames)
更新一條數據,只更新vo里的字段,其他字段不更新,vo中與condNames的同名字段為條件值 |
public static int update(Connection cnn,String tableName,RecordVO vo,String... condNames,LargeObject... larges)
更新一條數據,只更新vo里的字段,其他字段不更新,vo中與condNames的同名字段為條件值, 支持BLOB或CLOB字段,其中larges[0]對應第一個字段,larges[1]對應第二個字段 |
public static int updateAllField(Connection cnn,String tableName,IRecordSetVO rsvo,String... condNames)
修改多條數據,只更新rsvo里的字段,其他字段設置為null,rsvo中與condNames的同名字段為條件值 |
public static int updateAllField(Connection cnn,String tableName,RecordVO vo,RecordVO cond)
更新一條數據,只更新vo里的字段,其他字段設置為null,vo包含要更新的值,cond為條件值 |
public static int updateAllField(Connection cnn,String tableName,RecordVO vo,RecordVO cond,LargeObject... larges)
更新一條數據,只更新vo里的字段,其他字段設置為null,vo包含要更新的值,cond為條件值, 支持BLOB或CLOB字段,其中larges[0]對應第一個字段,larges[1]對應第二個字段 |
public static int updateAllField(Connection cnn,String tableName,RecordVO vo,String... condNames,LargeObject... larges)
更新一條數據,只更新vo里的字段,其他字段設置為null,vo中與condNames的同名字段為條件值 |
public static int updateAllField(Connection cnn,String tableName,RecordVO vo,String... condNames)
更新一條數據,只更新vo里的字段,其他字段設置為null,vo中與condNames的同名字段為條件值, 支持BLOB或CLOB字段,其中larges[0]對應第一個字段,larges[1]對應第二個字段 |
7.4 ExecuteSupport
public static int execute(Connection cnn,String sql)
執行一條sql |
public static int execute(Connection cnn,String... sqls)
執行多條sql |
7.5 QuerySupport
public static RecordVO find(Connection cnn,String sql)
執行sql得到結果,并讀取第一條數據 |
public static RecordVO find(Connection cnn,String sql,OutputStream... streams)
執行sql得到結果,讀取第一條數據,并將BLOB和CLOB寫入到streams數據流中,streams[0]對應第一個BLOB或CLOB以次類推 |
public static Long findForLong(Connection cnn,String countSql)
查詢一個整數值,要求第一個字段必須為整數,經常用于查詢數據庫數據總數 |
public static MulripleVO pageQuery
根據SQL做翻頁查詢,返回MulripleVO,其中RecordVO為統計信息,IRecordSetVO為數據 |
public static RecordSetVO query
執行sql得到結果,并讀取所有數據 |
public static PersistenceRecordSetVO queryPersistence
執行sql得到結果,并讀取所有數據,海量數據查詢方法 |
7.6 SqlMapSupport
SqlMapSupport將SQLMAP和SQL字段映射結合在一起,SqlMapSupport傳入的參數不在是SQL本身,而是SQLMAP的SQL-id。具體參考后面的章節
7.7 AbstractTableDAO
AbstractTableDAO是抽象實現單表增刪改查方法,只需設置表名和主鍵,無需寫SQL及繁瑣的配置文件,就完成了DAO的開發大大簡化了開發工作。
例如:
public class TestDAO extends AbstractTableDAO {
@Override
protected String getTable() {
return "riv_marketservice";
}
@Override
protected String[] getTableKeys() {
return new String[]{"ID"};
}
} |
7.8 注意
1、DeleteSupport、InsertSupport、UpdateSupport字段的匹配原則:OpenHandX-real將數據對象里的字段與tableName表名中一致的字段進行匹配,自動生成SQL并操作PreparedStatement賦值,最后執行SQL
2、DeleteSupport、InsertSupport、UpdateSupport、ExecuteSupport提供了setBatchCache靜態方法,該方法用于刪除、修改、更新、執行多條SQL的批量提交SQL數量(默認為10),開發者可以根據數據庫的實際情況自己設定。
DeleteSupport、InsertSupport、UpdateSupport的字段匹配使用了jdbc的ResultSetMetaData類,如果每次匹配都先查詢表結構會影響性能,open.real.core.RealTableMetaData本身可以緩存表結構,方法為setCacheTableMeta靜態方法(默認為不緩存)
8 SQL字段映射
依靠OpenHandX-real自動字段匹配功能不能完成的工作時,或者數據對象與表中字段名不匹配時需要使用SQL字段映射
SQL字段映射是完成sql中宏變量與數據對象字段的對應,生成新的SQL。宏的格式為:#字段名#
SqlAlludeExecuteSupport類提供數據維護類的方法
SqlAlludeQuerySupport類提供數據查詢類的方法
具體使用如下:
String sql=”update TABLE1 set f2=#f2# where f1=#f1#”;
RecordVO vo 為 f1=”0001”,f2=”test”
int[] types為{ java.sql.Types.VARCHAR, java.sql.Types.VARCHAR}
SqlAlludeExecuteSupport. execute(cnn, sql, vo, types)
組裝成SQL為update TABLE1 set f2=? where f1=?
并以PreparedStatement的st.setString(1,"test");st.setString(1,"0001");
其中#f2#對應到vo的f2字段,#f1#對應到vo的f1字段 |
也可以update TABLE1 set ID=#CODE1# where ID=#CODE2#,用于修改主鍵
Types參數可以為{ java.sql.Types.VARCHAR, java.sql.Types.VARCHAR},也可以為{1,1}
9 SQLMAP支持
允許開發者將SQL保存在XML配置文件中,便于統一規范和管理。同時支持多個XML的SQLMAP文件。
9.1 SQLMAP文件編寫
SQLMAP文件格式如下:
<config nameSpace="命名空間">
<file name="其他SQLMAP文件及路徑"/>
…
<sql id="唯一編號" sql="sql語句" type="如果有字段映射請指定數據類型"/>
…
</config> |
例如:
<?xml version="1.0" encoding="UTF-8"?>
<config nameSpace="space001">
<file name="sqlmap1.xml"/>
<sql id="sql001" sql="select * from TestTable"/>
<sql id="sql002" sql="update TestTable set TS_INT=TS_INT"/>
<sql id="sql003" sql="update TestTable set TS_INT=#TS_INT# and TS_LONG=#TS_LONG#" type="4,5"/>
</config> |
注意:
1、命名空間不是必須的;
2、同一個命名空間下sql id不能重復;
3、同一個SQLMAP文件可以指定多個file(其他SQLMAP文件及路徑);
4、其中type格式為: 數據類型1, 數據類型2, 數據類型3…,數據類型可以為數字,也可以為常量名(java.sql.Types的常量名)。如:"4,5"可以寫為"INTEGER,SMALLINT"
9.2 SQLMAP文件使用
使用SqlMapManager類對配置文件進行管理。
JDBC方式如下:
第一步:給SqlMapManager設置SQLMAP的文件的路徑,調用SqlMapManager. setRootPath方法
第二步:調用SqlMapManager.init方法初始化 |
例如:
SqlMapManager.setRootPath("D:/OpenHandX/real/real/config");
SqlMapManager.init(); |
Spring方式如下:
在applicationContext.xml文件里配置好路徑和初始化方法 |
例如:
<bean id="sqlMapConfigManager" class="open.real.sqlmap.SqlMapManager" init-method="init" >
<property name="path" value="classpath:"/>
</bean> |
以上方法只要初始化一次即可,后面就有3種使用方法:
1、直接使用SqlMapManager
取出SQL語句使用SqlMapManager.getSql方法
取出SQL的types使用SqlMapManager. getTypes方法
System.out.println(SqlMapManager.getSql("space002.sql003"));
System.out.println(SqlMapManager.getTypes("space001.sql004")); |
由以上方法取出的SQL和types就可以調出相關的方法操作了
QuerySupport.query(Connection cnn, SqlMapManager.getSql("space002.sql001"))
SqlAlludeQuerySupport.query(cnn, SqlMapManager.getSql("space002.sql001"), cond, SqlMapManager.getTypes("space002.sql001"))
|
2、使用JDBC的SqlMapSupport類
3、使用Spring的RealSqlMapTemplate模板類
10 SPRING支持
OpenHandX-real SPRING支持類在open.real.spring下,分別提供了RealTemplate基本支持類、RealSqlMapTemplate字段映射和SQLMAP支持類。用法很簡單大家查考前面的6.1-6.3章節和相應的javadoc。
使用的時候只要繼承RealTemplate或RealSqlMapTemplate類,掉父類相應的方法。
11 常用工具類
11.1 自動編號類
該工具類幫助開發者創建一個業務編號,比如:流水號、產品編號等。自動編號類需要在數據庫創建一張表:
字段名 |
中文名 |
說明 |
TYPE |
自動編號類型 |
每個自動編號的主鍵,如:流水號為1、產品號為2 |
EXP |
編號表達式 |
最終生成編號的模板 |
CURRNUM |
當前計數器 |
當前已生成第幾個號 |
DES |
說明 |
|
MINNUM |
最小計數器 |
當前計數器的允許最小值 |
MAXNUM |
最大計數器 |
當前計數器的允許最大值 |
STEP |
計數器步幅 |
每獲取新編號 當前計數器時距上一個編號的當前計數器差距 |
CURRTIME |
當前時間 |
創建新編號時的時間 |
LEN |
計數器長度 |
允許計數器轉化成字符串的長度 |
FILLCHAR |
填充字符 |
如果LEN大于CURRNUM的長度則用該,字符在前面補齊 |
AutoNumberService方法如下:
public String getAutoNumber(Connection cnn,Integer type)
獲取某個業務類型為type的一個編號 |
public List<String> getAutoNumber(Connection cnn,Integer type,int count)
獲取某個業務類型為type的count個編號 |
public List<String> getAutoNumber(Connection cnn,Integer type,int count,RecordVO vo)
獲取某個業務類型為type的一個編號,需要使用vo數據作為模板 |
public String getAutoNumber(Connection cnn,Integer type,RecordVO vo)
獲取某個業務類型為type的count個編號,需要使用vo數據作為模板 |
例如:
在數據庫里定義一個自動編號為:
TYPE=1,EXP= "PRD{number}",LEN=10,FILLCHAR=0
如果此時CURRNUM為23,getAutoNumber(cnn,1)獲取后的編碼為:PRD0000000024
|
在數據庫里定義一個自動編號為:
TYPE=1,EXP= " FB{prdCode}{number}",LEN=7,FILLCHAR=0
vo的數據為prdCode="001"
如果此時CURRNUM為23,getAutoNumber(cnn,1,vo)獲取后的編碼為:FB0010000024
|
11.2 業務日志類
用于記錄通常業務操作發生的時間、地點、事件,必要的時候可以記錄操作人
字段名 |
中文名 |
說明 |
LOGCODE |
日志編號 |
主鍵 |
LOGTIME |
日志時間 |
生成業務日志時的時間 |
LOGTYPE |
信息類型 |
業務日志的類型 |
LOGTITLE |
信息標題 |
業務日志的簡述 |
LOGMESSAGE |
日志信息 |
業務日志的內容 |
AutoNumberService方法如下:
public int insertBusLog(Connection cnn,RecordVO vo)
|
public int insertBusLog(Connection cnn,String code,Date time,Integer type,String title,String message)
|
11.3 枚舉常量類
枚舉常量類用在系統中不會經常變動的常量數據,例如:性別(男、女)、學歷(初中、高中、大專、本科…)。象這類的數據可以統一管理起來,統一顯示名稱、統一多語言化管理
枚舉類型主表
字段名 |
中文名 |
說明 |
TYPECODE |
類型編號 |
主鍵 |
NAME |
名稱 |
簡稱,如:性別 |
DES |
說明 |
說明該枚舉的作用 |
枚舉值表
字段名 |
中文名 |
說明 |
TYPECODE |
類型編號 |
主鍵 |
VALUE |
值 |
枚舉的值,如:男為1、女為2 |
NAME1 |
名稱1 |
顯示的中文名稱,如:男、女 |
NAME2 |
名稱2 |
顯示英文名稱,如:male、female |
NAME3 |
名稱3 |
其他語言的名稱 |
NAME4 |
名稱4 |
。。。 |
NAME5 |
名稱5 |
。。。 |
EnumService方法如下:
public MulripleVO getEnum(Connection cnn,String code)
獲取枚舉類型及其下的所有枚舉值 |
public RecordVO getEnumValue(Connection cnn,String code,String value)
獲取枚舉類型和值下的枚舉值定義 |
public String getEnumValueName(Connection cnn,String code,String value)
獲取枚舉類型和值下的枚舉值名稱 |
public RecordSetVO getEnumValues(Connection cnn,String code)
獲取枚舉類型下的所有枚舉值 |
public void setLanguage(int language)
設置當前EnumService的默認語言,默認為1(取NAME1字段) |
11.4 系統信息類
系統中還會有信息提示,如:錯誤信息提示,這些信息提示的完整和規范直接影響用戶友好性。系統信息類提供統一規范的信息提示模板及多語言支持。
字段名 |
中文名 |
說明 |
CODE |
編號 |
主鍵 |
TYPE |
類型 |
信息類型 |
MESSAGE1 |
信息1 |
中文信息模板 |
MESSAGE2 |
信息2 |
英文信息模板 |
MESSAGE3 |
信息3 |
其他語言信息模板 |
MESSAGE4 |
信息4 |
。。。 |
MESSAGE15 |
信息5 |
。。。 |
MessageService方法如下:
public String getMessageText(Connection cnn,String code,RecordVO vo)
根據信息編號獲取信息 |
public void setLanguage(int language)
設置當前MessageService的默認語言,默認為1(取MESSAGE1字段) |
模板的定義,可以是一串字符,字符中可以包含宏,宏的格式為{字段名}。
如:
vo的數據為:f1="員工號"
數據庫表中MESSAGE1="{f1}輸入不能為空!"
通過MessageService的方法可以得到"員工號輸入不能為空!"
11.5 樹型結構類
系統中對樹的使用也非常多,如:組織機構、產品等。樹型結構類將這些結構的數據統一放在一個表中,再通過專門的實現類提供的檢索方法。這樣有利于代碼重用,提高開發效率。實現業務數據與數據結構分離。OpenHandX-real提供兩種實現方法。
11.5.1COMMON樹型結構類
普通樹實現,是通過PARENTID字段完成樹型結構組建,這種樹結構簡單,插入、移動、刪除一個節點相對較快,但是檢索所有子、所有祖先必須遞歸效率非常低,節點數越多越明顯。
字段名 |
中文名 |
說明 |
TYPE |
樹類型 |
樹的類型,一個類型代表一棵樹,如:機構樹為1、產品樹為2 |
BUSID |
業務ID |
對應到業務數據的主鍵,如:機構編號、產品編號 |
PARENTID |
父ID |
上級業務數據主鍵 |
SORT |
順序 |
同級的顯示順序 |
11.5.2SEARCH樹型結構類
最優樹實現,數據架構增加級別、左右跨度,它所有的子節點都在它的跨度范圍內。這種的的新增、移動效率非常低,但是檢索所有子、所有祖先效率非常高。用于樹變化量較小,查詢較多的應用中。
字段名 |
中文名 |
說明 |
TYPE |
樹類型 |
樹的類型,一個類型代表一棵樹,如:機構樹為1、產品樹為2 |
BUSID |
業務ID |
對應到業務數據的主鍵,如:機構編號、產品編號 |
LVL |
級別 |
當前數據所處的級別 |
LEFTSETP |
左跨度-下級的最小 |
所有下級的LEFTSETP大于等于當前的LEFTSETP |
RIGHTSETP |
右跨度-下級的最大 |
所有下級的RIGHTSETP小于等于當前的RIGHTSETP |
SEARCH樹實現原理是通過LEFTSETP、RIGHTSETP來決定上下級,其中上級節點的LEFTSETP、RIGHTSETP包含所有子節點的LEFTSETP、RIGHTSETP。同級兄弟節點之間的LEFTSETP、RIGHTSETP不會交叉。通過此原理實現的樹,能很容易完成對所有子的檢索(任意深度)。同時DAO還提供SQL where子句的方法便于開發者與業務表做關聯查詢。
public String getAllChildrenWhere(Connection cnn,String table,int type,String busId)
查詢busId所有子的SQL where子句 |
public String getNextChildrenWhere(Connection cnn,String table,int type,String busId)
查詢busId下一級子的SQL where子句 |
public String getBorthersWhere(Connection cnn,String table,int type,String busId)
查詢busId同級兄弟的SQL where子句 |
public String getParentWhere(Connection cnn,String table,int type,String busId)
查詢busId上級父的SQL where子句 |
public String getAncestorsWhere(Connection cnn,String table,int type,String busId)
查詢busId上級所有祖先的SQL where子句 |
樹型結構類的方法很多,具體請查看javadoc
11.6 注意
常用工具類所用到的表名都是可以由開發者自定義的。JDBC或spring的實現DAO類里都提供setTableName方法。通過此方法來完成。
12 OpenHandX所有項目介紹
項目名稱 |
說明 |
open-Common |
公共開發包,整理了日常開發中可能經常用到的方法、工具類 |
open-Chart |
圖表工具,核心采用jfreechart,將jfreechart重新包裝簡化,方便使用 |
open-Report |
多維度報表工具,支持表達式計算、匯總、分組、排序、集成圖表,支持Excel輸出 |
open-Real |
持久層報表工具,封裝jdbc的增、刪、改、查。具有自動匹配sql條件,orm影射 |
open-Batch |
分布式批量架構,處理復雜耗時的數據加工或ETL加工 |
open-Unreal |
SS(Script-Service)腳本服務Web開發框架,并提供WebServie功能 |
open-River |
基于open-unreal的ESB產品,提供代理和點對點模式,并提供快速消息傳輸通道 |
OpenHandX下載地址:http://code.google.com/p/openhandx2/
posted on 2011-01-12 10:05
彭明華 閱讀(2104)
評論(5) 編輯 收藏 所屬分類:
OpenHandX核心