[开发技巧] 实现dorado方言自定义

hotbarsmu 2008-09-20

DBDataset是dorado中不采用持久层技术,而直接通过jdbc方式实施项目开发中常用的dataset类型,其主要子类为SqlDataset, AutoSqlDataset.
DBDataset都默认提供了数据库方言的支持,可以很好的解决查询分页问题,以及增删改的批量数据提交问题。
方言指定:
在配置datasource时,通过dialect指定使用的方言


<datasource name="doradosample" type="JDBC">
<driver>org.hsqldb.jdbcDriver</driver>
<url>jdbc:hsqldb:file:D:/work/dorado5/sample/data/hsqldb/doradosample</url>
<dialect>com.bstek.dorado.data.db.dialect.HSQLDBDialect</dialect>
<user>sa</user>
</datasource>
 

目前可以支持的方言有:

方言类 支持的数据库
com.bstek.dorado.data.db.dialect.OracleDialect Oracle8,9
com.bstek.dorado.data.db.dialect.Oracle10gDialect Oracle10
com.bstek.dorado.data.db.dialect.MSSQLDialect Microsoft SQL Server 2000/2005
com.bstek.dorado.data.db.dialect.MySQLDialect Mysql
com.bstek.dorado.data.db.dialect.SybaseDialect Sybase
com.bstek.dorado.data.db.dialect.DB2Dialect DB2 7/8/9
com.bstek.dorado.data.db.dialect.PostgreDialect Postgre
com.bstek.dorado.data.db.dialect.InterbaseDialect Interbase
com.bstek.dorado.data.db.dialect.InformixDialect Informix
com.bstek.dorado.data.db.dialect.AccessDialect Access
com.bstek.dorado.data.db.dialect.HSQLDBDialect HSQL
 


以上的方言由dorado默认提供
对于一些特殊版本的数据库或则在该处方言无法提供用户自定义方言机制的系统中,开发人员可以自定义方言类。
自定义方言方式:
1. 自定义类继承如下方言基类
com.bstek.dorado.data.db.dialect.DefaultDialect 

2. 在类中实现两个方法

getPagingSql根据给定的sql语句返回一个拥有分页处理功能的sql语句。
public String getPagingSql (String sql, int pageSize, int pageIndex)

Parameters:
sql- String 原始sql,一般由开发人员设定
pageSize - int 本次查询页的记录数
pageIndex – int 本次查询的页号
Returns:
String

--------------------------------------------------------------------------------

supportsPagingSql设定本方言是否支持分页处理
public boolean supportsPagingSql()

Returns:
boolean
 

实现范例(MySQLDialect):

public String getPagingSql(String sql, int pageSize, int pageIndex) {
int offset = (pageSize * (pageIndex - 1));
boolean hasOffset = (pageIndex > 1);

StringBuffer pageSql = new StringBuffer();
pageSql.append(sql);
pageSql.append(hasOffset ?
" limit " + offset + ", " + (offset + pageSize) :
" limit " + pageSize);
return pageSql.toString();
}

public boolean supportsPagingSql() {
return true;
}
 

查询分页处理:
如下的xml配置中我们指定dataset的pageSize属性

<Dataset id="datasetEmployee"
type="Wrapper"
dataSource="doradosample"
originTable="EMPLOYEE"
wrappedType="AutoSql"
pageSize="15">
 

在客户端我们通过pagePilot动态设定dataset的pageIndex属性,或者直接通过dataset的loadPage方法指定某页下载数据。

Global site tag (gtag.js) - Google Analytics