<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 11  文章 - 79  trackbacks - 0
    <2011年1月>
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    歡迎合作

     

    聯系方式:openhandx@foxmail.com

     

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

     

     

     

     

     

      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需要:     

    Java 5

    open-common1.04

    commons-lang-2.1

    commons-beanutils-1.7

    commons-logging-1.0.4

    spring2.0以上及相關(可選)

    db-derby-10.5.3.0 (可選)

    javassist3.3

    4          名次解釋

    數據對象OpenHandX-common提供的單條數據存儲對象RecordVO、多條數據存儲對象RecordSetVO、PersistenceRecordSetVO、復合數據存儲對象MulripleVO

    5          主要特性

    SQL生成和數據的組裝-自動生成增、刪、改、按主鍵查詢操作的SQL和數據的組裝, 使數據庫開發變得簡單易行;

    查詢結果集封裝和持續優化的執行效率-允許開發者自己寫查詢SQL,SQL的效率完全控制在開發者手里,并能根據實際情況持續優化;

    結果集的數據加工功能-結果集返回是RecordSetVO對象, RecordSetVO對象本身具有排序、分組、檢索、統計、不重復值等功能

    海量數據的支持-集成了OpenHandX-common特有持久PersistenceRecordSetVO對象,能一次從數據庫中取出所有數據(只要應用服務器硬盤的剩余空間足夠大),取出這些海量數據不占當前應用服務器的內存;

    JDBC支持-由開發者自己管控數據庫連接、事務,充分發揮開發者的想象力,提供開發者的高自由度,剩下繁瑣的工作就由OpenHandX-real完成;

    支持大數據對象-開發者只要提供InputStreamOutputStream接口對象就能讀取數據庫的BLOBCLOB數據

    SPRING支持-OpenHandX-real與Spring做了無縫的集成,由spring管理DAO和Service類、數據庫連接池、數據庫事務;

    XMLSQLMAP支持-OpenHandX-real提供輕巧的SQL管理功能,允許開發者將SQL保存在XML配置文件中,便于統一規范和管理;

    SQL字段映射-很多時候依靠OpenHandX-real自動字段匹配功能不能完成的工作時,如:數據對象多個字段對應數據庫中同一個字段時需要通過字段映射強制指定

    常用工具類-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)

    組裝成SQLupdate 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,getAutoNumbercnn1獲取后的編碼為:PRD0000000024

     

    在數據庫里定義一個自動編號為:

    TYPE=1,EXP= " FB{prdCode}{number}",LEN=7,FILLCHAR=0

    vo的數據為prdCode="001"

    如果此時CURRNUM為23,getAutoNumbercnn1,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

    顯示英文名稱,如:malefemale

    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

    SSScript-Service)腳本服務Web開發框架,并提供WebServie功能

    open-River

    基于open-unrealESB產品,提供代理和點對點模式,并提供快速消息傳輸通道

    OpenHandX下載地址:http://code.google.com/p/openhandx2/

     

     

     

    posted on 2011-01-12 10:05 彭明華 閱讀(2104) 評論(5)  編輯  收藏 所屬分類: OpenHandX核心

    FeedBack:
    # 窩窩影視 2011-01-12 15:31 窩窩影視
    學習了!  回復  更多評論
      
    # re: OpenHandX-Real 1.0 2011-01-21 13:56 qiu768
    google code 那里提供的下載,怎么沒有open char的jar包?  回復  更多評論
      
    # re: OpenHandX-Real 1.0 2011-01-28 20:06 彭明華
    @qiu768
    下載地址:http://code.google.com/p/openhandx/downloads/list
    從沒有什么open char項目啊,real需要open common的  回復  更多評論
      
    # re: OpenHandX-Real 1.0 2011-04-15 09:24 qiu768
    一直關注OpenHandX,好久了,怎么工作流跟規則引擎方面的內容沒見發布?  回復  更多評論
      
    # re: OpenHandX-Real 1.0 2011-04-19 20:50 彭明華
    @qiu768
    謝謝你的關注,今年打算推出web框架。工作流引擎和規則引擎肯定是要發布的,現在還處于規劃階段。  回復  更多評論
      

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 免费av片在线观看网站| 色婷五月综激情亚洲综合| 亚洲精品网站在线观看不卡无广告 | 极品色天使在线婷婷天堂亚洲| 最近中文字幕免费mv视频7| 午夜免费福利小电影| 毛片在线播放免费观看| 国产在线精品免费aaa片| 黄色网站软件app在线观看免费| 亚洲人成网国产最新在线| 亚洲一级毛片中文字幕| 亚洲一级毛片免费看| 亚洲天堂一区二区三区| 亚洲sss综合天堂久久久| 亚洲综合一区无码精品| 亚洲AV无码资源在线观看| 韩国亚洲伊人久久综合影院| 美女视频黄频a免费大全视频| 亚洲视频在线观看网站| 亚洲日本视频在线观看| 亚洲一区二区三区播放在线| 亚洲色欲啪啪久久WWW综合网| 青青草原精品国产亚洲av| 亚洲理论片在线中文字幕| 亚洲sss综合天堂久久久| 亚洲sm另类一区二区三区| 粉色视频成年免费人15次| 成人妇女免费播放久久久| 日韩成人免费视频| 久久九九兔免费精品6| 成年人在线免费观看| 亚洲国产精品一区二区第一页免| a级毛片无码免费真人| 日韩在线a视频免费播放| 亚洲精品国产综合久久一线| 国产亚洲精品岁国产微拍精品 | a毛片在线还看免费网站| 2020因为爱你带字幕免费观看全集 | 国产成人精品亚洲日本在线| 国产精品亚洲一区二区三区| 国内精品免费久久影院|