DbUtil分析
分析一個最簡單的框架流程
dbutil是我知的最簡單的框架,分析它有利于了解框架的基礎思路
select一個對象并返回是此框架最簡單流程:
@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; }?
在以上代碼段,創建了一個BeanHandler:BeanHandler<Admin> beanHandler = new BeanHandler<Admin>(Admin.class);
執行了sql:admin = queryRunner.query(connection, sql, beanHandler, name);
畫圖分析了sql執行的流程,以及此流程調用的method,是屬于哪個類(BeanHandler的作用):
? ? ? ? 執行的最終,是靠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; }斷點調試:
每執行一次for循環:通過PropertyDescriptor prop,設置空參bean(反射instance創建)的一個子屬性(根據rs)最終返回處理好的bean
?
總結
- 上一篇: selenium+python笔记3
- 下一篇: android- Auto Monit