首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

强大的JDBC操作组件DBASS1.0公布第一个预览版

2012-10-25 
强大的JDBC操作组件DBASS1.0发布第一个预览版?DBASS是一个使用泛型技术的一系列JDBC工具类库。它参考了Comm

强大的JDBC操作组件DBASS1.0发布第一个预览版

?DBASS是一个使用泛型技术的一系列JDBC工具类库。它参考了Commons DBUtils的实现。加入了一个通用的DAO,提供了不错的JDBC操作API(类似于Spring 的JDBCTemplate),包括通用的多数据库支持的分页查询方案等等。也提供了一个非常简单易用的基于注解的事务管理方案。至于为什么要重新发明这个轮子。这是因为Commons DBUtils过于简单,Spring的JDBCTemplate需要依赖于庞大的Spring。由于Cwin需要以插件形式运行使得它并不适合要求。现在的DBASS版本体形控制得不错,只有20多Kb。此版本支持mssql,mysql,oracle,postgresql。

现在刚刚发布1.0版,请各位大大给些评论,提些建议。多谢了。

集成DBASS

DBASS的集成很简单,只需要提供一个数据库类型和一个数据源。

您可以提供一个名叫dbass.properties的配置文件(这个文件可以在下载的包中找到)来提供数据源。如果你感觉:啊?又多一个配置文件!我们系统已经在其它地方配置过数据源了!那么,您可以使用一行代码来完成初始化。选择全在您的手上。

通过调用cn.antia.db.DbUtils的静态方法. public static void init(String dbType,DataSource dataSource) 可以完成初始化。dbType可以为相个可选值中的一个:mssql,mysql,oracle,postgre。

在完成初始化以后,就可以在应用程序中调用下面介绍的API了。

?

依赖组件:

如果您需要使用基于注解的事务支持,将依赖于AspectJ1.5+。当然我们建议您使用基于注解的事务。因为它使用起来的确很方便。

否则,DBASS不依赖于任何第三方组件。

CommonDAO的介绍

cn.antia.db. CommonDAO类提供了较为全面的数据库操作方法。提供了一个数据库透明的分页查询解决方案。以下是CommonDAO的常用方法列表:


int gtRecordCount(SqlParams sqlParams)int getRecordCount(String sql)<T> List<T> queryFirstField(SqlParams sqlParams)<T> List<T> queryFirstField(String sql)Map<String,Object> queryFirstMap(SqlParams sqlParams)Map<String,Object> queryFirstMap(String sql)<T> T queryFirstObject(SqlParams sqlParams)<T> T queryFirstObject(String sql)<T> List<T> queryList(SqlParams sqlParams, Class<T> clazz)<T> List<T> queryList(SqlParams sqlParams, int page, int pageSize, String orderField, boolean isAsc, Class<T> clazz)<T> List<T> queryList(String sql, Class<T> clazz)<T> List<T> queryList(String sql, int page, int pageSize, String orderField, boolean isAsc, Class<T> clazz)List<Map<String,Object>> queryListMap(SqlParams sqlParams)List<Map<String,Object>> queryListMap(SqlParams sqlParams, int page, int pageSize, String orderField, boolean isAsc)List<Map<String,Object>> queryListMap(String sql)List<Map<String,Object>> queryListMap(String sql, int page, int pageSize, String orderField, boolean isAsc)<K,T> Map<K,T> queryMap(SqlParams sqlParams) //MAP:以第一列为KEY,第二列为VALUE<K,T> Map<K,T> queryMap(String sql)<T> T queryObject(SqlParams sqlParams, Class<T> clazz)<T> T queryObject(String sql, Class<T> clazz)int update(SqlParams sqlParams)int update(String sql)boolean runSql(String sql)


其中SqlParams对象封装了带问号(占位符)的SQL语句与参数数组。

DbUtils的使用

DBASS提供的DbUtils最开始的版本是与Apache Commons DbUtil的DbUtils类是一致的。提供了一些打开与关闭连接之类的方法。另外增加了一些方法,不过这些方法对于用户来说是无关紧要的。

事务的使用与TransactionUtils

DBASS提供了基于注释的事务支持。支持事务嵌套。

事务的配置很简单:如果您的某个方法需要事务支持。只需在方法前面加入一个注释即可。

事务注释:cn.antia.dn. AssTranscation

例如:

@AssTranscationpublic int deleteUser(…){…} 

是不是很简单呢。

?

如果您想手动控制事务的话。TransactionUtils为事务的支持提供了一组静态方法。一般使用事务只需关注三个方法即可:

begin (); ?????? 开始一个事务。如果在调用此方法之前当前线程正在事务当中,那么将不再打开新的事务。而只是将后面的操作加入到已经存在的事务中。

commit();?????? ?????? 提交事务。

rollback();???? 回滚事务。

rollback(Throwable e);?????? 回滚事务,参数为引发回滚的异常

TransactionUtils的其它方法包括:

isInTransaction(): ?????? 当前线程是否在事务中

isConnInTransaction():????? 此数据库连接是否在事务中

currentConnection():? 取得当前线程的数据库连接

?

TransactionUtils使用示例:

void test(){TransactionUtils.begin();    try{        String sql = "update address set borough = '000000000' where id = 2";        CommonDAO.update(sql);        sql = "update address set borough = '000000000' where id = 3";        CommonDAO.update(sql);    }catch(Exception e){        TransactionUtils.rollback(e);        return;    }TransactionUtils.commit();}

注意:TransactionUtils的事务支持需要与CommonDAO或者DbUtils配合使用。这里的CommonDAO或者DbUtils中“或者”的意思是指:要么您使用CommonDAO来完成操作。要么您使用DbUtils来获取与关闭DB Connection。因为TransactionUtils无法管理从其它地方取到的DB Connection。

注意:如果事务回滚,TransactionUtils将会在事务回滚之后抛出一个运行时异常。以告知业务方法的调用者。


在此下载DBASS1.0

1 楼 hyw520110 2008-11-19   有少数地方的封装写的令人有些匪夷所思显的有些多余,还有报错的地方 2 楼 sunarrow 2008-11-20   是么?请指教,在下希望得到您的意见。还有,报错的地方也告诉我哦 -- 谢啦 3 楼 zingers 2008-11-20   不错的,希望能持续改进,但是别试图做成一个怪物 4 楼 xieke 2008-11-20   “DBASS 提供了基于注释的事务支持。支持事务嵌套。 ”

被这句话所吸引,于是下载并观摩了代码,
看到实现是:
内部事务回滚,外部事务跟着回滚。

真正的嵌套事务应该是子事务回滚不影响父事务,只是回到子事务调用前的状态。 5 楼 sunarrow 2008-11-20   呵呵 --- 谢谢指教,其实我也的现了这个问题,但没改了--- 6 楼 sunarrow 2008-11-20   呵呵 --- 谢谢指教,其实我也发现了这个问题,但没改了--- 7 楼 xieke 2008-11-20   其实利用 jdbc3.0 的savepoint特性 就可以实现的,楼主继续完善吧 8 楼 sunarrow 2008-11-20   多谢,又长见识了... 9 楼 sunarrow 2008-11-21   xieke 写道
其实利用 jdbc3.0 的savepoint特性 就可以实现的,楼主继续完善吧

谢谢指教,在JE这里愿意鼓励指教人的还真不多啊

热点排行