`
sunarrow
  • 浏览: 18620 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

强大的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

例如:

@AssTranscation
public 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

分享到:
评论
9 楼 sunarrow 2008-11-21  
xieke 写道

其实利用 jdbc3.0 的savepoint特性 就可以实现的,楼主继续完善吧

谢谢指教,在JE这里愿意鼓励指教人的还真不多啊
8 楼 sunarrow 2008-11-20  
多谢,又长见识了...
7 楼 xieke 2008-11-20  
其实利用 jdbc3.0 的savepoint特性 就可以实现的,楼主继续完善吧
6 楼 sunarrow 2008-11-20  
呵呵 --- 谢谢指教,其实我也发现了这个问题,但没改了---
5 楼 sunarrow 2008-11-20  
呵呵 --- 谢谢指教,其实我也的现了这个问题,但没改了---
4 楼 xieke 2008-11-20  
“DBASS 提供了基于注释的事务支持。支持事务嵌套。 ”

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

真正的嵌套事务应该是子事务回滚不影响父事务,只是回到子事务调用前的状态。
3 楼 zingers 2008-11-20  
不错的,希望能持续改进,但是别试图做成一个怪物
2 楼 sunarrow 2008-11-20  
是么?请指教,在下希望得到您的意见。还有,报错的地方也告诉我哦 -- 谢啦
1 楼 hyw520110 2008-11-19  
有少数地方的封装写的令人有些匪夷所思显的有些多余,还有报错的地方

相关推荐

    Java项目设计与开发范例

    chapter1:第1章的源程序可使用Jdk1.3以上的任何版本编译和运行,命令运行商品库存管理系统 的命令格式为:java chapter1. MainFrame。 &lt;br&gt; chapter2:第2章的主类是Simulator,运行环境同第1章,也可以在...

    ManagedBass:.Net包装程序,用于“低音”音频库

    现在,ManagedBass是按每个AddOn拆分的一组软件包提供的。 入门 安装NuGet软件包 Install-Package ManagedBass 从下载BASS库,并将它们放在Build Output Directory中。 有关更多信息,请参见 。 变更日志 v3.0 ...

    关于c#三层架构代码实例

    三层架构是一种常见的软件设计模式,它将应用程序分为三个主要的层次:表示层(UI层)、业务逻辑层(BLL层)和数据访问层(DAL层)。这种分层设计有助于提高系统的可维护性和扩展性。 1. **表示层(UI层)**: - ...

    【大数据课设】p105出租车数据可视化分析-大数据-实训大作业.zip

    项目资源包含:可运行源码+数据集+文档 python + numpy, pandas, matplotlib, pyecharts, wordcloud 适用人群:学习不同技术领域的小白或进阶学习者;可作为课程设计、大作业、工程实训或初期项目立项。 数据来源:数据集taxis.csv从网络下载 数据清洗:异常值与缺失值的处理:有一些数据distance(乘车距离)为零而且上下车地点为空,还有些一些数据的payment(支付方式)为空。 数据预处理:将列名更改成中文 标准化与归一化: 数据分析: 数据可视化:

    TypeScript 入门教程

    TypeScript 入门教程

    人脸识别_课堂考勤_OpenCV_服务端系统_1741777828.zip

    人脸识别项目实战

    历届电赛试题及综合测评(真题+模拟题)

    本资源汇总了 历届全国电子设计竞赛(电赛)真题+模拟题,涵盖 电路设计、嵌入式系统、信号处理、自动控制等核心考点,并提供详细解析及综合测评,帮助参赛者高效备赛、查漏补缺、提升实战能力。 适用人群: 适合 准备参加电子设计竞赛的大学生、电赛爱好者、电子信息类相关专业的学生,以及希望提高电子设计和电路分析能力的工程师。 能学到什么: 电赛考察重点:熟悉往届竞赛的命题方向及考核重点。 电路设计与仿真:提升模拟电路、数字电路、单片机等核心技能。 问题分析与解决能力:通过综合测评找到薄弱点并针对性提升。 实战经验:掌握竞赛策略,提高应试效率和设计能力。 阅读建议: 建议先 通读真题,了解题型与解题思路,然后 结合模拟题实战演练,查找不足并通过测评强化练习,逐步提升竞赛能力。

    2024人工智能如何塑造未来产业:AI对各行业组织带来的的变革研究研究报告.pdf

    2024人工智能如何塑造未来产业:AI对各行业组织带来的的变革研究研究报告.pdf

    人脸识别_Golang_SDK_命令行登录_微信小程序应用_1741772240.zip

    人脸识别项目源码实战

    Vulkan原理与实战课程

    给大家分享一套课程——Vulkan原理与实战课程

    SiriYXR_Sokoban11_1741860914.zip

    c语言学习

    海豚鲸鱼数据集 5435张图 正确识别率可达92.6% 可识别:海豚 虎鲸 蜥蜴 海豹 鲨鱼 龟 支持yolov8格式标注

    海豚鲸鱼数据集 5435张图 正确识别率可达92.6% 可识别:海豚 虎鲸 蜥蜴 海豹 鲨鱼 龟 支持yolov8格式标注

    答谢中书书教学设计.docx

    答谢中书书教学设计.docx

    人脸识别_环境搭建_dlib_face_recognitio_1741771308.zip

    人脸识别项目源码实战

    网络技术_Web服务器_C语言_学习交流版_1741863251.zip

    c语言学习

    安卓开发_Gradle配置_React_Native_Meg_1741777287.zip

    人脸识别项目源码实战

    人工智能_深度学习_图像识别_UI界面_项目展示.zip

    人脸识别项目实战

    基于Springboot框架的美发门店管理系统的设计与实现(Java项目编程实战+完整源码+毕设文档+sql文件+学习练手好项目).zip

    本美发门店管理系统有管理员和用户两个角色。用户功能有项目预定管理,产品购买管理,会员充值管理,余额查询管理。管理员功能有个人中心,用户管理,美容项目管理,项目类型管理,项目预定管理,产品库存管理,产品购买管理,产品入库管理,会员卡管理,会员充值管理,余额查询管理,产品类型管理,系统管理等。因而具有一定的实用性。 本站是一个B/S模式系统,采用SSM框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得美发门店管理系统管理工作系统化、规范化。本系统的使用使管理人员从繁重的工作中解脱出来,实现无纸化办公,能够有效的提高美发门店管理系统管理效率。 关键词:美发门店管理系统;SSM框架;MYSQL数据库;Spring Boot 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术 2 2.1 MYSQL数据库 2 2.2 B/S结构 3 2.3 Spring Boot框架简介 4 3系统分析 4 3.1可行性分析 4 3.1.1技术可行性 4 3.1.2经济可行性 5 3.1.3操作可行性 5 3.2系

    Python实现基于SSA-CNN-GRU麻雀算法优化卷积门控循环单元数据分类预测的详细项目实例(含完整的程序,GUI设计和代码详解)

    内容概要:本文档介绍了基于SSA-CNN-GRU麻雀算法优化卷积门控循环单元数据分类预测的详细项目实例,重点讲述了该项目的背景、目标、挑战与解决方案、技术特点、应用领域等方面的内容。文档详细记录了从项目启动、数据预处理、算法设计(SSA优化CNN-GRU模型)、构建与评估模型到实现美观的GUI界面整个过程,并讨论了防止过拟合的技术如正则化、早停和超参数优化。另外还涵盖了项目扩展的可能性、部署和应用策略、需要注意的地方以及未来改进的方向。全文强调了模型的泛化能力和计算效率,展示了该混合算法模型在实际应用中的优越性能。 适合人群:具备一定的Python编程经验及机器学习基础知识的研究人员和技术人员;对深度学习、智能优化算法及实际应用感兴趣的学者和从业者;寻求提升数据分析和预测准确性的金融分析师、数据科学家等相关专业人士。 使用场景及目标:本文档非常适合用作学习和参考资料,以掌握如何将SSA、CNN与GRU三种先进技术结合起来进行复杂的分类和预测问题求解。具体应用场景包括但不限于以下几个方面:金融领域——股票价格预测;医疗保健领域——辅助诊断;工业制造——预防性维护;智能家居——个性化服务;以及其他涉及到时序数据分析和多模态数据处理的场合。文档既包含了理论知识又提供了完整的源代码示例,可以帮助读者理解算法原理并通过实践中加深对其的认识。 其他说明:该项目不仅仅是关于算法的设计实现,更是有关于系统的整体架构规划以及工程上的考量,比如环境准备(确保环境洁净、必要包的安装等)、数据准备、GPU配置支持等等。同时文中给出了详细的代码片段,方便开发者理解和复现实验成果。值得注意的是,虽然文中提供了一套通用解决方案,但在真实场景下还需要针对性的调整参数或修改网络结构来达到最好的性能效果。此外,对于追求更高的预测精度或解决更大规模的问题,作者建议进一步探索深度强化学习等高级技术和多任务学习策略,并且考虑使用增量学习让模型能够适应新数据而不必重新训练整个模型。最后提到安全性和隐私保护也是项目实施过程中的重要因素,要妥善保管用户的敏感信息并且做到合法合规地收集和使用数据。

    人脸识别_T形分布_Gabor变换_特征提取_增强鲁棒性_1741777397.zip

    人脸识别项目实战

Global site tag (gtag.js) - Google Analytics