自制DbHelper实现自动化数据库交互
Posted djuwcnhwbx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自制DbHelper实现自动化数据库交互相关的知识,希望对你有一定的参考价值。
之前一直对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;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
确保数据库中字段与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("------------------------------------------------------");
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
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("------------------------------------------------------");
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
Quick Start
源码以及打包好的jar文件,已上传至我的GitHub上面了。希望有兴趣的朋友能一起研究一下,让我们一起为开源奉献自己的光和热吧。
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
以上是关于自制DbHelper实现自动化数据库交互的主要内容,如果未能解决你的问题,请参考以下文章
3月9日(用 DBHelper 工具连接 mysql 数据库 实现登录验证)