<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  評(píng)論-1047  文章-0  trackbacks-0

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

    ??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 山風(fēng)小子 閱讀(3113) 評(píng)論(2)  編輯  收藏 所屬分類: Groovy & Grails
    主站蜘蛛池模板: 直接进入免费看黄的网站| 三年片免费高清版| 亚洲乱码日产精品a级毛片久久| jizz免费在线影视观看网站| kk4kk免费视频毛片| 亚洲AV成人无码久久精品老人 | 亚洲日韩一区二区一无码| 亚洲成av人在片观看| 91在线手机精品免费观看| 国产亚洲人成网站在线观看| 亚欧免费一级毛片| 亚洲av福利无码无一区二区 | 亚洲色爱图小说专区| 五月婷婷综合免费| 一个人看的免费视频www在线高清动漫 | 中文字幕精品无码亚洲字| 免费专区丝袜脚调教视频| 九九视频高清视频免费观看| 亚洲精品白色在线发布| 亚洲精品国精品久久99热| 无码区日韩特区永久免费系列| 暖暖免费中文在线日本| 亚洲六月丁香六月婷婷色伊人| 色久悠悠婷婷综合在线亚洲| 18禁免费无码无遮挡不卡网站| 九九热久久免费视频| 亚洲精品字幕在线观看| 在线观看国产情趣免费视频| 免费无遮挡无码永久视频| 午夜肉伦伦影院久久精品免费看国产一区二区三区| 亚洲欧洲国产精品你懂的| 亚洲国产精品综合久久一线| 99精品国产免费久久久久久下载| 免费看黄的成人APP| 十八禁的黄污污免费网站| 亚洲 暴爽 AV人人爽日日碰| 亚洲天堂中文字幕| 亚洲午夜福利在线观看| mm1313亚洲精品无码又大又粗| 成年免费大片黄在线观看com| 中文无码亚洲精品字幕|