日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

DbUtil分析

發(fā)布時(shí)間:2023/12/9 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DbUtil分析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

分析一個(gè)最簡(jiǎn)單的框架流程

dbutil是我知的最簡(jiǎn)單的框架,分析它有利于了解框架的基礎(chǔ)思路

select一個(gè)對(duì)象并返回是此框架最簡(jiǎn)單流程:

@Override public Admin selectAdminByUsername(String name) {Admin admin = null;QueryRunner queryRunner = new QueryRunner();String sql = "select id,username,phone,password,salt from admin where username=?";Connection connection = JdbcUtils.getConnection();// todo BeanHandle???BeanHandler<Admin> beanHandler = new BeanHandler<Admin>(Admin.class);try {admin = queryRunner.query(connection, sql, beanHandler, name);} catch (SQLException e) {System.out.println("adminDaoImpl_e_104");e.printStackTrace();}return admin; }

?

在以上代碼段,創(chuàng)建了一個(gè)BeanHandler:BeanHandler<Admin> beanHandler = new BeanHandler<Admin>(Admin.class);

執(zhí)行了sql:admin = queryRunner.query(connection, sql, beanHandler, name);

畫(huà)圖分析了sql執(zhí)行的流程,以及此流程調(diào)用的method,是屬于哪個(gè)類(lèi)(BeanHandler的作用):

? ? ? ? 執(zhí)行的最終,是靠BeanProcessor的tobean方法

public <T> T toBean(ResultSet rs, Class<T> type) throws SQLException {PropertyDescriptor[] props = this.propertyDescriptors(type);ResultSetMetaData rsmd = rs.getMetaData();int[] columnToProperty = this.mapColumnsToProperties(rsmd, props);return this.createBean(rs, type, props, columnToProperty); } this.createBean如下: private <T> T createBean(ResultSet rs, Class<T> type, PropertyDescriptor[] props, int[] columnToProperty) throws SQLException {T bean = this.newInstance(type);for(int i = 1; i < columnToProperty.length; ++i) {if (columnToProperty[i] != -1) {PropertyDescriptor prop = props[columnToProperty[i]];Class<?> propType = prop.getPropertyType();Object value = this.processColumn(rs, i, propType);if (propType != null && value == null && propType.isPrimitive()) {value = primitiveDefaults.get(propType);}this.callSetter(bean, prop, value);}}return bean; }

斷點(diǎn)調(diào)試:

每執(zhí)行一次for循環(huán):通過(guò)PropertyDescriptor prop,設(shè)置空參bean(反射instance創(chuàng)建)的一個(gè)子屬性(根據(jù)rs)

最終返回處理好的bean

?

總結(jié)

以上是生活随笔為你收集整理的DbUtil分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。