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

来源:互联网 发布:淘宝刷好评兼职平台 编辑:程序博客网 时间:2024/06/11 20:19

之前一直对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

1 0