几个经常用到的通用Dorado基础类

1.Dorado中虽然提供了ViewModel的接口, 但是这是一个非常"肥"的接口, 对于客户程序来说很多东东都是用不着的, 于是将经常用到的方法进行了一下封装, 创建了一个更小的接口以便能将viewmodel的功能传递到其他地方使用, 当然出于某些需要, 又加了几个经常需要的方法.
Java代码
/**
* 将ViewModel中的getDateset()等方法抽取出来,以便在utils类的静态方法中调用ViewModel的getDataset()等方法
*
* @author Macro Chen
* @since May 6, 2008
*/
public interface IViewModelProvider extends IProvider {
public ViewDataset getDataset(String datasetId);

public Control getControl(String controlId) throws Exception;

public int getState();

public boolean isViewState();

public boolean isViewState(int state);

public MetaData properties();
}

/**
* 将ViewModel中的getDateset()等方法抽取出来,以便在utils类的静态方法中调用ViewModel的getDataset()等方法
*
* @author Macro Chen
* @since May 6, 2008
*/
public interface IViewModelProvider extends IProvider {
public ViewDataset getDataset(String datasetId);

public Control getControl(String controlId) throws Exception;

public int getState();

public boolean isViewState();

public boolean isViewState(int state);

public MetaData properties();
}


2.下面的两个类一般联合起来和DBStatement的query(), queryForList()方法一起使用, 用来将通过jbbc取得的VariantSet类型的记录集转换成JavaBean类型的记录集
Java代码
/**
*
* 封装创建DBStatement,给statement的参数赋值和关闭DBStatement操作 具体是查询还是更新操作由子类实现
*
* @author Macro Chen
* @Dec 20, 2006
*
*/
public abstract class SqlExecutor {

/**
* 公共操作(获取Statement和关闭之)
*
* @param sql
* @return
* @throws Exception
*/
public Object execute(String sql) throws Exception {
DBStatement stmt = DoradoUtils.getStatement(sql);
try {
ParameterSet p = stmt.parameters();
return extract(stmt, p);
} finally {
stmt.close();
}
}

/**
* 子类需要实现的CURD操作
*
* @param stmt
* @param p
* @return
* @throws Exception
*/
public abstract Object extract(DBStatement stmt, ParameterSet p) throws Exception;
}

/**
*
* 封装创建DBStatement,给statement的参数赋值和关闭DBStatement操作 具体是查询还是更新操作由子类实现
*
* @author Macro Chen
* @Dec 20, 2006
*
*/
public abstract class SqlExecutor {

/**
* 公共操作(获取Statement和关闭之)
*
* @param sql
* @return
* @throws Exception
*/
public Object execute(String sql) throws Exception {
DBStatement stmt = DoradoUtils.getStatement(sql);
try {
ParameterSet p = stmt.parameters();
return extract(stmt, p);
} finally {
stmt.close();
}
}

/**
* 子类需要实现的CURD操作
*
* @param stmt
* @param p
* @return
* @throws Exception
*/
public abstract Object extract(DBStatement stmt, ParameterSet p) throws Exception;
}


Java代码
/**
* 用来将VariantSet转换成JavaBean的接口
*
* @author Macro Chen
* @Dec 18, 2006
*
*/
public interface RowConverter {
public Object convert(VariantSet vs) throws SQLException;
}

/**
* 用来将VariantSet转换成JavaBean的接口
*
* @author Macro Chen
* @Dec 18, 2006
*
*/
public interface RowConverter {
public Object convert(VariantSet vs) throws SQLException;
}


3.DBStatement是Dorado中最常用的一个类, StatementDelegate这个封装类貌似用处不大, 本来主要是为了用方法的连写,后来发现经过格式化的连写代码比较难看.
Java代码
/**
* 对DBStatement做进一步的代理, 让设置参数的查询和更新更方便, 支持方法的连写
*
* @author Macro Chen
* @since Jun 19, 2008
*/
public class StatementDelegate extends DBStatement {
public DBStatement getDBStatement() {
return this;
}

public StatementDelegate addParameter(String name, Long value) {
if (value == null) {
this.parameters().setValue(name, value);
} else {
this.parameters().setLong(name, value);
}
return this;
}

public StatementDelegate addParameter(String name, Double value) {
this.parameters().setDouble(name, value);
return this;
}

public StatementDelegate addParameter(String name, String value) {
this.parameters().setString(name, value);
return this;
}

public StatementDelegate addParameter(String name, Integer value) {
if (value == null) {
this.parameters().setValue(name, value);
} else {
this.parameters().setInt(name, value);
}
return this;
}

public StatementDelegate setDateTime(String fieldName) {
DoradoUtils.setDateTime(parameters(), fieldName);
return this;
}

public StatementDelegate setPrimaryKey(long primaryKey) {
addParameter("id", primaryKey);
return this;
}

public StatementDelegate setPrimaryKey() {
long primaryKey = IdentifierUtils.getPrimaryKey();

addParameter("id", primaryKey);
return this;
}
}

/**
* 对DBStatement做进一步的代理, 让设置参数的查询和更新更方便, 支持方法的连写
*
* @author Macro Chen
* @since Jun 19, 2008
*/
public class StatementDelegate extends DBStatement {
public DBStatement getDBStatement() {
return this;
}

public StatementDelegate addParameter(String name, Long value) {
if (value == null) {
this.parameters().setValue(name, value);
} else {
this.parameters().setLong(name, value);
}
return this;
}

public StatementDelegate addParameter(String name, Double value) {
this.parameters().setDouble(name, value);
return this;
}

public StatementDelegate addParameter(String name, String value) {
this.parameters().setString(name, value);
return this;
}

public StatementDelegate addParameter(String name, Integer value) {
if (value == null) {
this.parameters().setValue(name, value);
} else {
this.parameters().setInt(name, value);
}
return this;
}

public StatementDelegate setDateTime(String fieldName) {
DoradoUtils.setDateTime(parameters(), fieldName);
return this;
}

public StatementDelegate setPrimaryKey(long primaryKey) {
addParameter("id", primaryKey);
return this;
}

public StatementDelegate setPrimaryKey() {
long primaryKey = IdentifierUtils.getPrimaryKey();

addParameter("id", primaryKey);
return this;
}
}


4.这个是我比较常用到的一个类, 用了一个回调的模式, 用来处理在一个sql操作中调用其他的sql操作.后来发现它还有一个妙用, 就是封装一个不完全的查询, 丢到另一个查询中使用, 并注入剩下的查询条件
Java代码
/**
* 为了处理在调用setSql()的时候关闭正在使用的DBStatement, 将创建DBStatement延迟到使用的时候
*
* @author Macro Chen
* @since Jun 11, 2008
*/
public abstract class DBStatementCallback {

public DBStatement getDBStatement() throws Exception {
DBStatement stmt = DoradoUtils.getDBStatement(getSql());
setParameters(stmt.parameters());
return stmt;
}

protected abstract String getSql();

protected abstract void setParameters(ParameterSet parameters);
}

/**
* 为了处理在调用setSql()的时候关闭正在使用的DBStatement, 将创建DBStatement延迟到使用的时候
*
* @author Macro Chen
* @since Jun 11, 2008
*/
public abstract class DBStatementCallback {

public DBStatement getDBStatement() throws Exception {
DBStatement stmt = DoradoUtils.getDBStatement(getSql());
setParameters(stmt.parameters());
return stmt;
}

protected abstract String getSql();

protected abstract void setParameters(ParameterSet parameters);
}


Java代码
/**
* 针对只设置sql, 不设置parameter的情况
* @author Macro Chen
* @since Jun 11, 2008
*/
public abstract class SimpleDBStatementCallback extends DBStatementCallback {
@Override
protected void setParameters(ParameterSet parameters) {
}

}

/**
* 针对只设置sql, 不设置parameter的情况
* @author Macro Chen
* @since Jun 11, 2008
*/
public abstract class SimpleDBStatementCallback extends DBStatementCallback {
@Override
protected void setParameters(ParameterSet parameters) {
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值