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

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

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

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

    BeanProcessor類(lèi)
    function:
    匹配每一列到對(duì)應(yīng)的屬性,并且將結(jié)果集轉(zhuǎn)換為對(duì)應(yīng)對(duì)象的屬性。其子類(lèi)一般要重寫(xiě)處理鏈去實(shí)現(xiàn)用戶(hù)的行為。
    Details:
    一個(gè)Map類(lèi)型,并用靜態(tài)區(qū)為8種基本類(lèi)型設(shè)置默認(rèn)值。
    toBean方法,傳入resultSet和類(lèi)類(lèi)型.
    這個(gè)類(lèi)獲取類(lèi)的屬性描述和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ù)組
    通過(guò)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中沒(méi)有對(duì)應(yīng)的property,則跳過(guò)。
    否則,通過(guò)columnToProperty獲得對(duì)應(yīng)的屬性類(lèi)型,并調(diào)用processCloumn()方法獲得屬性值。
    并調(diào)用callSetter()方法,給Bean設(shè)置對(duì)應(yīng)property的值

    processColumn方法,傳入resultSet,index(resultSet的下表),propType屬性的類(lèi)型
    function:獲取resultSet某一特定列的值
    根據(jù)propType類(lèi)型,調(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]的類(lèi)型是否否是以下三種:(因?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)的類(lèi)型包裝
    如果不是 調(diào)用私有方法isCompatibleType去check,value和params類(lèi)型是否匹配
    如果匹配:
    調(diào)用setter.invoke()方法。將value設(shè)置到targetObjectBean中去
    isCompatibleType方法,傳入value對(duì)象和type類(lèi)類(lèi)型
    如果value對(duì)象和type類(lèi)型一致則返回true,
    如果type類(lèi)型是基本類(lèi)型且value類(lèi)型是該基本類(lèi)型的包裝類(lèi)型,也返回true,
    否則返回false;
    ----------------------------------------------------------------------------------------
    RowProcessor接口
    function:把resultSet對(duì)象某一列轉(zhuǎn)變?yōu)槟骋粋€(gè)特殊的類(lèi)
    Details:
    接口中的方法列表
    toArray(ResultSet) --將結(jié)果集以數(shù)組形式返回 
    toBean(ResultSet, Class<T> <T>) --將結(jié)果集以JavaBean形式返回
    toBeanList<ResultSet, Class<T> <T>) --將結(jié)果集以L(fǎng)ist<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,如果用戶(hù)傳入,最終的BeanProcessor就為用戶(hù)傳入的,否則就用缺省的。
    toArray方法。
    toBean方法,調(diào)用convert的toBean方法。
    toBeanList方法,調(diào)用convert的toBeanList方法
    toMap方法,將resultSet.getColumnName作為key
    一個(gè)私有成員類(lèi)CaseInsensitiveHashMap,繼承了HashMap<String, Object>
    function:內(nèi)部定義lowerCaseMap,做一個(gè)二級(jí)鏈表,key 存放oldKey.toLowerCase(),value存放oldKey
    這個(gè)私有類(lèi)的作用:數(shù)據(jù)庫(kù)不一定對(duì)大小寫(xiě)的列名敏感。
    ----------------------------------------------------------------------------------------
    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)目上線(xiàn)了。。。應(yīng)該可以稍微輕松一段日子了。。

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


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产午夜无码片免费| 天天影视色香欲综合免费| 亚洲国产成人精品无码区在线观看 | 在线观看av永久免费| 久久精品国产亚洲av天美18| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 在线观看亚洲AV日韩A∨| 亚洲国产成人乱码精品女人久久久不卡| 中文字幕在线免费看| 精品丝袜国产自在线拍亚洲| 在线亚洲精品自拍| 四虎免费大片aⅴ入口| 中文字幕免费不卡二区| 亚洲精品无AMM毛片| 亚洲AV无码一区二区乱子伦| 国内自产拍自a免费毛片| 久久er国产精品免费观看2| 亚洲免费网站观看视频| 亚洲av永久无码精品国产精品| 大学生高清一级毛片免费| 国产午夜精品免费一区二区三区 | 最新国产乱人伦偷精品免费网站 | 久久精品国产亚洲Aⅴ香蕉| 久久99九九国产免费看小说| 国产在线观看无码免费视频| 在线观看日本亚洲一区| 99ri精品国产亚洲| 亚洲精品无码专区在线在线播放 | 在线免费观看污网站| 无码日韩精品一区二区三区免费 | 亚洲精品成a人在线观看☆| 亚洲AV无码专区国产乱码4SE | 国产成+人+综合+亚洲专| 亚洲电影中文字幕| 亚洲婷婷国产精品电影人久久| 成年人在线免费看视频| 亚洲视频在线观看免费视频| 成人无码WWW免费视频| www在线观看免费视频| 综合偷自拍亚洲乱中文字幕| 亚洲人成小说网站色|