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

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

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

    First they ignore you
    then they ridicule you
    then they fight you
    then you win
        -- Mahatma Gandhi
    Chinese => English     英文 => 中文             
    隨筆-221  評論-1047  文章-0  trackbacks-0

    潛水那么久,也該寫點東西跟各位朋友分享一下了:-)
    小弟關注Groovy已有數(shù)月(您可以到Groovy官方網(wǎng)站 http://groovy.codehaus.org 下載),發(fā)現(xiàn)其極具魅力,故在我參加的學校'創(chuàng)新試驗項目'中,就用它來實現(xiàn)最簡易的ORM,做的非常簡單,主要原因是沒有時間,因為小弟學業(yè)繁重,所以抽出一個下午的時間來實現(xiàn)一個簡易版的ORM,數(shù)據(jù)庫用的是MySQL。現(xiàn)在簡單說明一下所示代碼,將User類的一個實例通過save方法保存到數(shù)據(jù)庫中,然后再根據(jù)給定條件通過findBy方法從數(shù)據(jù)庫中取出實例,最后刪除一個特定實例。由于深知通過XML文件進行配置的痛苦,所以在設計時沒有用到任何XML文件。此程序讓程序員只需關注自己要處理的對象,而不用關心數(shù)據(jù)庫方面的東西,簡化開發(fā)過程。最后我想說明的是,由于時間問題,所以編碼方面只注重算法的體現(xiàn),沒有考慮其他方面。下面給出的代碼僅供演示及參考(源碼已經(jīng)上傳,點擊下載):

    ??1 ??package??edu.ecust.orm
    ??2
    ??3??import??groovy.sql.Sql
    ??4??import??groovy.text.Template
    ??5??import??groovy.text.SimpleTemplateEngine
    ??6
    ??7???public?class?User???{
    ??8??????private???int??id
    ??9??????private???String?name
    ?10??????private???int??age
    ?11
    ?12???????public??User()???{}
    ?13
    ?14???????public??User(?int??id)???{
    ?15??????????this?.id??=??id
    ?16?????}

    ?17
    ?18???????public??User(?int??id,?String?name,??int??age)???{
    ?19??????????this.id??=??id
    ?20??????????this.name??=??name
    ?21??????????this.age??=??age
    ?22?????}

    ?23
    ?24???????public???int??getId()???{
    ?25??????????return??id
    ?26?????}

    ?27
    ?28???????public???void??setId(?int??id)???{
    ?29??????????this.id??=??id
    ?30?????}

    ?31
    ?32???????public??String?getName()???{
    ?33??????????return??name
    ?34?????}

    ?35
    ?36???????public???void??setName(String?name)???{
    ?37??????????this.name??=??name
    ?38?????}

    ?39
    ?40???????public???int??getAge()???{
    ?41??????????return??age
    ?42?????}

    ?43
    ?44???????public???void??setAge(?int??age)???{
    ?45??????????this.age??=??age
    ?46?????}

    ?47
    ?48
    ?49
    ?50???????public??String?toString()???{
    ?51??????????return??name??+??"(#"???+?id?+?",?"??+?age?+?")"
    ?52?????}

    ?53?}

    ?54
    ?55?typemap??=??[?"int"?:?"INTEGER"?,??"java.lang.Integer"?:?"INTEGER"?,??"long"?:?"BIGINT"?,??"java.lang.Long"?:?"BIGINT"?,??"short"?:?"SMALLINT"?,??"java.lang.Short"?:?"SMALLINT"?,??"byte"?:?"TINYINT"?,??"java.lang.Byte"?:?"TINYINT"?,??"float"?:?"FLOAT"?,??"java.lang.Float"?:?"FLOAT"?,??"double"?:?"DOUBLE"?,??"java.lang.Double"?:?"DOUBLE"?,??"java.math.BigDecimal"?:?"NUMERIC"?,??"char"?:?"CHAR(1)"?,??"java.lang.Character"?:?"CHAR(1)"?,??"java.lang.String"?:?"VARCHAR(50)"?,??"boolean"?:?"BIT"?,??"java.lang.Boolean"?:?"BIT"?]
    ?56
    ?57??def?capitalize(str)???{
    ?58?????def?c??=??str.charAt(?0?)
    ?59??????int??asci??=??(?int?)c
    ?60???????if??(asci??>???96???&&??asci??<???123?)???{
    ?61??????????return??((?char?)(asci??-???32?)).toString()??+??str.substring(?1?)
    ?62?????}

    ?63?}

    ?64
    ?65?def?user??=???new??User(?1?,??"Daniel"?,??21?)
    ?66
    ?67??def?connect()???{
    ?68??????return??Sql.newInstance(
    ?69??????????"jdbc:mysql://localhost:3306/orm"?,??"root"?,
    ?70??????"1106"?,??"com.mysql.jdbc.Driver"?)
    ?71?}

    ?72
    ?73??def?pointToLine(str)???{
    ?74??????return??str.replaceAll(?"\\p{Punct}"?,??"_"?)
    ?75?}

    ?76
    ?77??def?getFields(u)???{
    ?78?????def?clazz??=??u.getClass()
    ?79?????def?fields??=??clazz.getDeclaredFields()
    ?80?????def?fieldunit??=??[:]
    ?81???????for??(f?in?fields)???{
    ?82?????????def?fstr??=??f.toString()
    ?83???????????if??(fstr.startsWith(?"private"?))???{
    ?84?????????????def?fieldname??=??fstr.substring(fstr.lastIndexOf(?"."?)??+???1?)
    ?85?????????????def?methodname??=???"get"???+??capitalize(fieldname)
    ?86??????????????fieldunit.put(fieldname,?clazz.getMethod(methodname).invoke(u))
    ?87?????????}

    ?88?????}

    ?89
    ?90??????return??fieldunit
    ?91?}

    ?92
    ?93??tablename?=?"";
    ?94??def?save(u)???{
    ?95?????def?clazz??=??u.getClass()
    ?96?????def?classname??=??clazz.getName()
    ?97?????def?classunit??=??[:]
    ?98?????fieldunit??=??getFields(u)
    ?99?????classunit.put(classname,?fieldunit)
    100?????def?keySet??=??classunit.keySet()
    101?????def?it??=??keySet.iterator()
    102?????def?fields
    103???????while??(it.hasNext())???{
    104?????????tablename??=??it.next()
    105?????????fields??=??classunit.get(tablename)
    106?????}

    107?????tablename??=??pointToLine(tablename)
    108?????def?fkeySet??=??fields.keySet()
    109?????def?fit??=??fkeySet.iterator()
    110???????def?creationstmt??=???""
    111
    112???????def?order??=??[:]
    113???????def?num??=???0
    114?????while??(fit.hasNext())???{
    115???????def?fieldname??=??fit.next()
    116???????def?fieldvalue??=??fields.get(fieldname)
    117?????????if??(?"id"???==??fieldname)???{
    118???????????creationstmt??+=???"id?INTEGER?PRIMARY?KEY?not?null,"
    119????????}
    ???else????{
    120???????????creationstmt??+=??fieldname??+???"?"???+??typemap.get(fieldvalue.getClass().getName())??+???","
    121???????}

    122???????order.put(num++?,?fieldname)
    123???}

    124???creationstmt??=??creationstmt.substring(?0?,?creationstmt.length()??-???1?)
    125???def?valuestr??=???"("
    126???def?vkeySet??=??order.keySet()
    127???def?vit??=??vkeySet.iterator()
    128???params??=???"("
    129?????while??(vit.hasNext())???{
    130???????def?elem??=??vit.next()
    131???????def?v??=??order.get(elem)
    132???????valuestr??+=???"'\${"???+??v??+???"}',"
    133???????params??+=???"`"???+??v??+???"`,"
    134???}

    135???valuestr??=??valuestr.substring(?0?,?valuestr.length()??-???1?)
    136???params??=??params.substring(?0?,?params.length()??-???1?)
    137???valuestr??+=???")"
    138???params??+=???")"
    139???def?insertstmt??=???"INSERT?INTO?`"???+??tablename??+???"`"???+??params??+???"?VALUES"
    140???insertstmt??+=??valuestr
    141???def?engine??=???new??SimpleTemplateEngine()
    142???def?template??=??engine.createTemplate(insertstmt).make(fields)
    143???insertstmt??=??template.toString()
    144???def?createstmt??=???"""
    145??????????CREATE?TABLE?IF?NOT?EXISTS?`"""??+?tablename?+??"""`
    146?????????(
    147??????????????"""??+?creationstmt?+??"""
    148?????????);
    149??????"""
    150???????try????{
    151?????????????????def?sql??=??connect()
    152?????????????????sql.execute(createstmt)
    153?????????????????sql.execute(insertstmt)
    154
    155??????????????}
    ???catch??(Exception?e)???{
    156?????????????????int?id?=?u.getId()
    157?????????????????id++
    158?????????????????u.setId(id)
    159?????????????????save(u)
    160?????????????????//println?e.getMessage()
    161?????????????}

    162
    163??????return??u.getId()
    164?}

    165
    166?def?delete(u)?{
    167????try?{
    168????????def?id?=?u.getId()
    169????????def?sql??=??connect()
    170????????def?result?=?sql.execute("DELETE?FROM?`"?+?tablename?+?"`?WHERE?id="?+?id);
    171????????println?"delete?operation?completed!"
    172????}
    ?catch?(Exception?e)?{
    173????????println?e.getMessage()
    174????}

    175?}

    176
    177??def?findBy(classname,?condition)???{
    178?????def?sql??=??connect()
    179?????objs??=??[]
    180?????sql.eachRow(?"select?*?from?"???+??pointToLine(classname)??+???"?where?"???+??condition)???{
    181?????obj??=??Class.forName(classname).newInstance()
    182
    183?????def?clazz??=??obj.getClass()
    184?????def?fields??=??clazz.getDeclaredFields()
    185?????def?methods??=??clazz.getDeclaredMethods()
    186?????for??(f?in?fields)???{
    187?????????????def?fstr??=??f.toString()
    188???????????????if??(fstr.startsWith(?"private"?))???{
    189?????????????????def?fieldname??=??fstr.substring(fstr.lastIndexOf(?"."?)??+???1?)
    190?????????????????def?setmethodname??=???"set"???+??capitalize(fieldname)
    191?????????????????def?setmethod
    192???????????????????for??(m?in?methods)???{
    193?????????????????????def?methodname??=??m.toString()
    194???????????????????????if??(methodname.contains(setmethodname))???{
    195?????????????????????????setmethod??=??m
    196?????????????????????}

    197?????????????????}

    198?????????????????def?fieldvalue??=??it.getProperty(fieldname)
    199?????????????????setmethod.invoke(obj,?fieldvalue)
    200?????????????}

    201?????????}

    202
    203?????????objs.add(obj)
    204???}

    205
    206??????return??objs
    207?}

    208
    209?println?"Id?of?the?saved?object?is?"?+?save(user)
    210?println?"Found?"?+?findBy(?"edu.ecust.orm.User"?,??"id?=?'11'"?)
    211?userToDelete?=?new?User(12,?"Daniel",?21)
    212?delete(userToDelete)
    213
    posted on 2006-08-29 14:13 山風小子 閱讀(3108) 評論(2)  編輯  收藏 所屬分類: Groovy & Grails
    主站蜘蛛池模板: 亚洲人成人无码网www电影首页| 免费v片在线观看| 妞干网在线免费视频| 国产免费人成视频在线观看| 免费少妇a级毛片人成网| 久久久久亚洲AV成人网| 国产l精品国产亚洲区在线观看| 亚洲国产精品国自产拍电影 | 日韩免费视频在线观看| 亚洲国产精品13p| 亚洲AV无码精品色午夜在线观看 | 国产亚洲人成A在线V网站| 久久久亚洲欧洲日产国码农村| 久久综合亚洲色HEZYO社区| 亚洲综合色一区二区三区| 免费人成大片在线观看播放电影 | 男男gvh肉在线观看免费| 成在线人免费无码高潮喷水| 在线日本高清免费不卡| 成人啪精品视频免费网站| 毛茸茸bbw亚洲人| 亚洲精品视频专区| 国产成人亚洲综合无| 免费观看91视频| 大陆一级毛片免费视频观看| 亚洲国产精品激情在线观看| 亚洲成a人片在线观看中文动漫| 国产亚洲中文日本不卡二区| jizz免费在线观看| 免费看美女裸露无档网站| 免费人成网站7777视频| 久久久亚洲AV波多野结衣| 黄色网址大全免费| h视频在线观看免费完整版| 亚洲国产人成精品| 亚洲专区一路线二| 中文在线免费不卡视频| 大学生美女毛片免费视频| 婷婷亚洲久悠悠色悠在线播放| 亚洲av永久中文无码精品 | 一区二区三区免费在线视频 |