<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    數據加載中……
    Apace源代碼學習1-dbutil初學之二

    BeanProcessor類
    function:
    匹配每一列到對應的屬性,并且將結果集轉換為對應對象的屬性。其子類一般要重寫處理鏈去實現用戶的行為。
    Details:
    一個Map類型,并用靜態區為8種基本類型設置默認值。
    toBean方法,傳入resultSet和類類型.
    這個類獲取類的屬性描述和resultSet的ResultSetMetaData.
    調用mapColumsToProperties方法獲得resultSet中的列和Bean的屬性對應列表。
    調用createBean方法,生成BeanObject。
    toBeanList方法,循環resultSet.next()方法去createBean(),返回一個List<T>


    mapColumnsToProperties方法,傳入ResultSetMetaData和PropertyDescriptor數組
    通過resultSetMetaData獲取Column的label or name 去和PropertyDescriptor的name做匹配,
    返回一個數組columnToProperty,數組的下標是resultSet的下表,數組的值對應的是resultSet該
    值對應Bean的property的位置。

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

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

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

    上周各種加班,總算把項目上線了。。。應該可以稍微輕松一段日子了。。

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


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产亚洲精品成人久久网站| 亚洲精品国产首次亮相| 一级特黄a免费大片| 国产一级淫片a免费播放口之| 亚洲国产视频久久| 免费观看的av毛片的网站| 免费看搞黄视频网站| 亚洲中文字幕无码爆乳AV| 免费无码又爽又刺激一高潮| 亚洲综合网站色欲色欲| 免费播放在线日本感人片| 婷婷久久久亚洲欧洲日产国码AV| 免费一级不卡毛片| 亚洲精品无码久久毛片波多野吉衣 | 成年免费a级毛片| 国产亚洲精品免费视频播放| 免费无码H肉动漫在线观看麻豆| 亚洲成AV人片在线观看无| 3344免费播放观看视频 | 无码欧精品亚洲日韩一区| 久久免费动漫品精老司机| 亚洲欧洲日产国码二区首页| 国产一卡2卡3卡4卡2021免费观看 国产一卡2卡3卡4卡无卡免费视频 | 久久免费区一区二区三波多野| 亚洲视频国产视频| 97人伦色伦成人免费视频| 亚洲无码在线播放| 免费精品无码AV片在线观看| 亚洲av无码专区在线| 免费va在线观看| 国产在线一区二区综合免费视频| 亚洲日韩中文字幕天堂不卡| 免费观看国产小粉嫩喷水| 光棍天堂免费手机观看在线观看| 亚洲日本香蕉视频| 免费a级毛片无码a∨性按摩| 久久99精品视免费看| 亚洲日本一线产区和二线| 亚洲精品无码不卡在线播放HE| 国产成人免费高清激情明星| 国产精品亚洲专区在线播放|