自制DbHelper實現自動化數據庫交互
阿新 • • 發佈:2019-01-27
connect span 基礎 圖片 配置 [] com n) quick
之前一直對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上面了。希望有興趣的朋友能一起研究一下,讓我們一起為開源奉獻自己的光和熱吧。
點擊獲取源碼及jar
再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshow
自制DbHelper實現自動化數據庫交互