自制DbHelper实现自动化数据库交互

简介: 之前一直对apache的DbUtils很好奇,也很佩服其中的设计上的智慧。于是就自己模拟实现了一个更加简便的小框架。我们只需要在配置文件中写上数据库层面的连接信息,就可以随心所欲的实现自己的需求了。

之前一直对apache的DbUtils很好奇,也很佩服其中的设计上的智慧。于是就自己模拟实现了一个更加简便的小框架。我们只需要在配置文件中写上数据库层面的连接信息,就可以随心所欲的实现自己的需求了。

设计思路

框架设计初稿

依赖

  • apache-commons-logging.jar
  • apache-commons-beanutils.jar
  • mysql-connector.jar

技术细节

其中最主要的是是使用了反射技术和泛型操作,实现了对bean对象的属性的解析以及实例化相关的bean对象。

public class Converter<T> {

    public static <T> T convert2Bean(ResultSet rs, Class<T> bean) throws Exception {
        Field[] fields = bean.getDeclaredFields();
        T obj = bean.newInstance();
        for (Field field : fields) {
            String pname = field.getName();
            BeanUtils.setProperty(obj, pname, rs.getObject(pname));
        }

        return obj != null ? obj : null;
    }

    public static <T> List<T> convert2BeanList(ResultSet rs, Class<T> bean) throws Exception {
        Field[] fields = bean.getDeclaredFields();
        List<T> lists = new ArrayList<T>();
        while (rs.next()) {
            T obj = bean.newInstance();
            for (Field field : fields) {
                String pname = field.getName();
                BeanUtils.setProperty(obj, pname, rs.getObject(pname));
            }
            lists.add(obj);
        }
        return lists != null ? lists : null;
    }

}

确保数据库中字段与Bean的属性保持一致,否则convert过程会失效 :-)

测试代码

这里没有将完整的代码贴出来,但是看到
List<DateTest> dates = runner.query(conn, sql, new BeanListHandler<DateTest>(DateTest.class));

List<DateTest> dates = runner.query(conn, sql, new BeanListHandler<DateTest>(DateTest.class),params);

足以说明问题了吧。

public static void main(String[] args) throws Exception {
        String sql = "select * from datetest";
        QueryRunner runner = new QueryRunner();
        DbHelper.register();
        Connection conn = DbHelper.getConn();
        List<DateTest> dates = runner.query(conn, sql, new BeanListHandler<DateTest>(DateTest.class));
        for (DateTest date : dates) {
            System.out.println(date.toString());
        }
        System.out.println("------------------------------------------------------");
    }
public static void main(String[] args) throws Exception {
        String sql = "select * from dataset where name=? and age=?";
        Object[] params = {'mark',20};
        QueryRunner runner = new QueryRunner();
        DbHelper.register();
        Connection conn = DbHelper.getConn();
        List<DateTest> dates = runner.query(conn, sql, new BeanListHandler<DateTest>(DateTest.class),params);
        for (DateTest date : dates) {
            System.out.println(date.toString());
        }
        System.out.println("------------------------------------------------------");
    }

Quick Start

源码以及打包好的jar文件,已上传至我的GitHub上面了。希望有兴趣的朋友能一起研究一下,让我们一起为开源奉献自己的光和热吧。

点击获取源码及jar

目录
相关文章
|
存储 SQL 关系型数据库
PHP与数据库交互:从基础到进阶
【10月更文挑战第9天】在编程的世界里,数据是流动的血液,而数据库则是存储这些珍贵资源的心脏。PHP作为一门流行的服务器端脚本语言,其与数据库的交互能力至关重要。本文将带你从PHP与数据库的基本连接开始,逐步深入到复杂查询的编写和优化,以及如何使用PHP处理数据库结果。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供宝贵的知识和技巧,让你在PHP和数据库交互的道路上更加从容不迫。
|
API 数据安全/隐私保护 开发者
使用MechanicalSoup进行网页自动化交互
使用MechanicalSoup进行网页自动化交互
335 2
|
人工智能 自然语言处理 API
UI-TARS:字节跳动开源专注于多平台 GUI 自动化交互的视觉语言模型
UI-TARS 是字节跳动推出的新一代原生图形用户界面(GUI)代理模型,支持跨平台自动化交互,具备强大的感知、推理、行动和记忆能力,能够通过自然语言指令完成复杂任务。
4508 16
UI-TARS:字节跳动开源专注于多平台 GUI 自动化交互的视觉语言模型
|
机器学习/深度学习 人工智能 自然语言处理
CogAgent-9B:智谱 AI 开源 GLM-PC 的基座模型,专注于预测和执行 GUI 操作,可应用于自动化交互任务
CogAgent-9B 是智谱AI基于 GLM-4V-9B 训练的专用Agent任务模型,支持高分辨率图像处理和双语交互,能够预测并执行GUI操作,广泛应用于自动化任务。
1023 12
CogAgent-9B:智谱 AI 开源 GLM-PC 的基座模型,专注于预测和执行 GUI 操作,可应用于自动化交互任务
|
人工智能 编解码 自然语言处理
AGUVIS:指导模型实现 GUI 自动化训练框架,结合视觉-语言模型进行训练,实现跨平台自主 GUI 交互
AGUVIS 是香港大学与 Salesforce 联合推出的纯视觉 GUI 自动化框架,能够在多种平台上实现自主 GUI 交互,结合显式规划和推理,提升复杂数字环境中的导航和交互能力。
813 8
AGUVIS:指导模型实现 GUI 自动化训练框架,结合视觉-语言模型进行训练,实现跨平台自主 GUI 交互
|
关系型数据库 Shell 网络安全
定期备份数据库:基于 Shell 脚本的自动化方案
本篇文章分享一个简单的 Shell 脚本,用于定期备份 MySQL 数据库,并自动将备份传输到远程服务器,帮助防止数据丢失。
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
4619 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
运维 监控 关系型数据库
数据库管理中的自动化运维:挑战与解决方案
数据库管理中的自动化运维:挑战与解决方案
|
存储 SQL API
探索后端开发:构建高效API与数据库交互
【10月更文挑战第36天】在数字化时代,后端开发是连接用户界面和数据存储的桥梁。本文深入探讨如何设计高效的API以及如何实现API与数据库之间的无缝交互,确保数据的一致性和高性能。我们将从基础概念出发,逐步深入到实战技巧,为读者提供一个清晰的后端开发路线图。
|
开发者 UED Java
Play Framework惊天秘密:如何让异常处理优雅得像芭蕾舞?
【8月更文挑战第31天】在Web应用开发中,异常处理至关重要,直接影响应用稳定性和用户体验。Play Framework作为轻量级Java Web框架,提供了基于Scala偏函数的灵活异常处理机制。通过实现`HttpErrorHandler`接口可定义全局异常逻辑,而在控制器中使用try-catch块则能捕获特定异常。定义自定义异常类也有助于表示特定错误情况。最佳实践包括保持处理一致性、提供有用错误信息、记录日志及分类处理异常。掌握这些技巧,能使Play应用更健壮可靠。
429 1