數(shù)據(jù)加載中……
          Apace源代碼學(xué)習(xí)1-dbutil初學(xué)之二

          BeanProcessor類
          function:
          匹配每一列到對(duì)應(yīng)的屬性,并且將結(jié)果集轉(zhuǎn)換為對(duì)應(yīng)對(duì)象的屬性。其子類一般要重寫處理鏈去實(shí)現(xiàn)用戶的行為。
          Details:
          一個(gè)Map類型,并用靜態(tài)區(qū)為8種基本類型設(shè)置默認(rèn)值。
          toBean方法,傳入resultSet和類類型.
          這個(gè)類獲取類的屬性描述和resultSet的ResultSetMetaData.
          調(diào)用mapColumsToProperties方法獲得resultSet中的列和Bean的屬性對(duì)應(yīng)列表。
          調(diào)用createBean方法,生成BeanObject。
          toBeanList方法,循環(huán)resultSet.next()方法去createBean(),返回一個(gè)List<T>


          mapColumnsToProperties方法,傳入ResultSetMetaData和PropertyDescriptor數(shù)組
          通過resultSetMetaData獲取Column的label or name 去和PropertyDescriptor的name做匹配,
          返回一個(gè)數(shù)組columnToProperty,數(shù)組的下標(biāo)是resultSet的下表,數(shù)組的值對(duì)應(yīng)的是resultSet該
          值對(duì)應(yīng)Bean的property的位置。

          createBean方法,傳入ResultSet,Class<T>,PropertyDescirptor[], columnToProperty
          先根據(jù)Class<T>調(diào)用newInstance()方法創(chuàng)建一個(gè)實(shí)例
          遍歷columnToProperty
          如果resultSet中的值在Bean中沒有對(duì)應(yīng)的property,則跳過。
          否則,通過columnToProperty獲得對(duì)應(yīng)的屬性類型,并調(diào)用processCloumn()方法獲得屬性值。
          并調(diào)用callSetter()方法,給Bean設(shè)置對(duì)應(yīng)property的值

          processColumn方法,傳入resultSet,index(resultSet的下表),propType屬性的類型
          function:獲取resultSet某一特定列的值
          根據(jù)propType類型,調(diào)用resultSet.getXXX(index)方法
          callSetter()方法,傳入targetBean,prop,value
          調(diào)用prop.getWriteMethod(),對(duì)應(yīng)property的setter()方法
          調(diào)用setter.getParameterTypes()方法獲取setter方法的輸入?yún)?shù)。
          首先要判斷setter的params[0]的類型是否否是以下三種:(因?yàn)閟etter()方法一般只有一個(gè)參數(shù))
          java.sql.Date、java.sql.Time、java.sql.Timestamp
          如果是 先將value的值用java.util.Data強(qiáng)制轉(zhuǎn)換,再用對(duì)應(yīng)的類型包裝
          如果不是 調(diào)用私有方法isCompatibleType去check,value和params類型是否匹配
          如果匹配:
          調(diào)用setter.invoke()方法。將value設(shè)置到targetObjectBean中去
          isCompatibleType方法,傳入value對(duì)象和type類類型
          如果value對(duì)象和type類型一致則返回true,
          如果type類型是基本類型且value類型是該基本類型的包裝類型,也返回true,
          否則返回false;
          ----------------------------------------------------------------------------------------
          RowProcessor接口
          function:把resultSet對(duì)象某一列轉(zhuǎn)變?yōu)槟骋粋€(gè)特殊的類
          Details:
          接口中的方法列表
          toArray(ResultSet) --將結(jié)果集以數(shù)組形式返回 
          toBean(ResultSet, Class<T> <T>) --將結(jié)果集以JavaBean形式返回
          toBeanList<ResultSet, Class<T> <T>) --將結(jié)果集以List<JavaBean>形式返回
          toMap(ResultSet)  --將結(jié)果集以Map形式返回
          ----------------------------------------------------------------------------------------
          BasicRowProcessor方法,實(shí)現(xiàn)了RowProcessor接口
          function:完成將某一行或多行結(jié)果集轉(zhuǎn)變?yōu)閷?duì)象或?qū)ο罅斜?/span>
          Details:
          定義一個(gè)BeanProcessor convert
          定義一個(gè)缺省的BeanProcessor,如果用戶傳入,最終的BeanProcessor就為用戶傳入的,否則就用缺省的。
          toArray方法。
          toBean方法,調(diào)用convert的toBean方法。
          toBeanList方法,調(diào)用convert的toBeanList方法
          toMap方法,將resultSet.getColumnName作為key
          一個(gè)私有成員類CaseInsensitiveHashMap,繼承了HashMap<String, Object>
          function:內(nèi)部定義lowerCaseMap,做一個(gè)二級(jí)鏈表,key 存放oldKey.toLowerCase(),value存放oldKey
          這個(gè)私有類的作用:數(shù)據(jù)庫不一定對(duì)大小寫的列名敏感。
          ----------------------------------------------------------------------------------------
          ResultSet接口
          function:實(shí)現(xiàn)這個(gè)接口,將結(jié)果集轉(zhuǎn)換成對(duì)象
          Details:
          handle(ResultSet rs)方法
          ----------------------------------------------------------------------------------------
          ResultSetIterator方法,實(shí)現(xiàn)Iterator接口
          function:包裝一個(gè)ResultSet對(duì)象成一個(gè)迭代器。
          由外接傳入RowProcessor或使用內(nèi)部缺省的BasicRowProcessor();
          重點(diǎn):
          override的next()方法調(diào)用的是convert.toArray()方法

          ----------------------------------------------------------------------------------------

          上周各種加班,總算把項(xiàng)目上線了。。。應(yīng)該可以稍微輕松一段日子了。。

          posted on 2011-07-24 23:10 潘潘.eagle 閱讀(162) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 新田县| 鹤岗市| 钟祥市| 清原| 山西省| 松桃| 凤凰县| 闵行区| 大厂| 东乡县| 忻城县| 西乌珠穆沁旗| 盐山县| 崇义县| 扶绥县| 水富县| 怀安县| 濮阳市| 陕西省| 定西市| 吉木乃县| 登封市| 湛江市| 兴业县| 崇州市| 历史| 海淀区| 壤塘县| 綦江县| 乳山市| 衡水市| 尼木县| 沈丘县| 应用必备| 桑日县| 伊金霍洛旗| 清水河县| 大宁县| 邵东县| 手游| 凤阳县|