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

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

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

    Java Architect

    導航

    <2006年8月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    統計

    常用鏈接

    留言簿(2)

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    2006年8月13日 #

    關于SAAS平臺的一點想法

    最近研究了幾個ERP,CRM的產品 象Sales force, Compeire, sugarCRM,覺得SAAS平臺無非需要提供以下可以高度定制的功能。

    1.  GUI
      • CSS
      • resources
      • menu/link
      • message i18n
      • form
      • GUI EventListener
    2. Business Object
      • business logic or call back
      • email
      • report charts
      • job scheduler
      • business rule
      • work flow
      • access control
      • asynchronous request.
    3. Database
     
    我覺得這里面最難的應屬GUI的高度可定制化。本人正在想用GWT來做一個基于上面想法的SASS平臺,屆時軟件可真正實現快速按需打造。歡迎JAVA界的同仁多提寶貴建議。






    posted @ 2008-06-19 05:54 zrq 閱讀(1060) | 評論 (0)編輯 收藏

    sql statement

      Select obj
     
    from CommDeductionType obj
      
    where 1=1
        #
    if($obj)
         
    and obj.deductionTypeCode = #{obj.deductionTypeCode}
        #
    end

    posted @ 2007-09-08 02:50 zrq 閱讀(147) | 評論 (0)編輯 收藏

    Open laszlo


    Datapointers are not bound to views like datapaths are, but they do have a place in the view hierarchy—that is, they "know about" parents and children.
     1 
     2 <datapointer xpath="myData:/" ondata="processData()">
     3     <method name="processData">
     4       this.selectChild(2); 
     5       do {
     6         if (this.xpathQuery( '@show' ) == 'south park') {
     7             Debug.write(this.xpathQuery('firstName/text()'));
     8         }
     9       } while (this.selectNext()); 
    10     </method>
    11   </datapointer>
    12 
    13 

    Create data set at runtime

    LzDataset: var dset = new LzDataset(null, {name: 'mydset'})

    $path{} limitations
    A limitation of the $path{} constraint is that the expression it contains is evaluated only at the initialization time, that is, an expression such as $path{'mynode[' + i + ']/@attr'} will behave like a $once{} constraint.Custome

    Customize the data binding
    1 <view name="swatch" width="200" height="30" 
    2   datapath="colors:/value[1]/text()">
    3     <method name="applyData" args="v">
    4       setBGColor(eval(v))
    5       display.setText(v)
    6     </method>
    7   </view>

    $path{}


    datapath.setdatapointer

    <canvas height="150">
    <dataset name="phonebook" src="resources/phonebook.xml"/>
    <simplelayout axis="x" spacing="20"/>

    <view name="contacts" height="150" width="100">
    <view bgcolor="0xe0e0e0" datapath="phonebook:/contacts/contact"
    onmouseover="setBGColor(0xc0c0c0)" onmouseout="setBGColor(0xe0e0e0)"
    onclick="details.datapath.setPointer(this.datapath.p)">
    <simplelayout axis="x" spacing="5"/>
    <text datapath="@firstName" resize="true"/>
    <text datapath="@lastName" resize="true"/>
    </view>
    <simplelayout spacing="5"/>
    </view>

    <view id="details" width="150" height="150" bgcolor="0xe0e0e0" fgcolor="blue">
    <datapath/>
    <text datapath="@firstName"/>
    <text datapath="@lastName"/>
    <text datapath="@phone"/>
    <text datapath="@email"/>
    <simplelayout spacing="5"/>
    </view>
    </canvas>



    posted @ 2007-07-27 03:18 zrq 閱讀(189) | 評論 (0)編輯 收藏

    DAO終結者

    動態組裝SQL是實際應用中的一個常見問題,我發現在很多論壇中的解決方案都不干淨,下面是我在很多項目中使用的方案,簡潔有效.

    基本概念如下:

    1. 使用模板技術,如Velocity,FreeMarker;
    2. 在SQL中不要使用?,使用自己的place holder ,such as #{variableName};

    象下面的SQL語句
    select firstName
    ????? ,lastName
    from users u
    where? u.userId= #{userId}

    #if($companyId)
    ? and u.companyId=#{companyId}
    #end

    處理過程如下:

    1.將所有變量放進一個MAP中;
    2.用VELOCITY進行MERGE,將得到以下的SQL,假定companyId 不為空;
    ? select firstName
    ????? ,lastName
    from users u
    where? u.userId= #{userId}
    ? and u.companyId=#{companyId}
    3.再將上面的SQL進一步處理,根據SQL語句中的placeHolder順序和MAP中的變量,生成一個變量的LIST,同時將變量的placeHolder轉換成?;
    4.將變量LIST的數值依次注入到preparedStatement中;

    ? Tips: 這里還可生成一個完全可執行的 SQL 語句輸出到 LOG , 以便進行除錯;
    5.執行SQL, reflection技術將ResultSet轉換成voList;

    ?

    將上面的過程封裝成一個 Class , 只需將 sqlName,parameterMap,voClass 傳入便可返回一個 voList 或數組 . 此舉將大大減化 DAO 的代碼 , 根據我的經驗 , 代碼最起碼減少 70%, 更為重要的是查詢非常容易維護 , 極大地減少了出錯的概率 ,SQL 語句清晰易懂 , 不再是醜陋的 criteria, 也不再是將一個個的分散的 SQL 片斷 , 我們的程序員將會有更多的時間來寫 SQL, 而不是做其它讓人厭煩的工作 , 排錯也變得異常簡單 , 唯一可能出錯的地方只能在 SQL , 只要將 LOG 輸出的完整可執行 SQL 放在 database client 中執行一下 , 問題在哪兒 , 一目了然 .

    我相信此方法 比起 iBatis, Spring jdbcTemplate,Hibernate Criteria 要容易使用得多 . 其實 Hibernate HQL, 也可以用此方法來動態生成 HQL.
    ?

    posted @ 2006-08-13 09:35 zrq 閱讀(254) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲成a人片在线观看天堂无码| 久久久无码精品亚洲日韩京东传媒| 国产成人亚洲综合一区| 久久永久免费人妻精品下载| 亚洲AV无码专区国产乱码电影| a毛片久久免费观看| 亚洲乱码中文字幕久久孕妇黑人| 一区二区三区免费电影| 狠狠色婷婷狠狠狠亚洲综合| 亚洲免费日韩无码系列| 亚洲精品成人片在线观看精品字幕 | 亚洲伊人久久精品影院| 国产在线一区二区综合免费视频| 国产亚洲人成网站观看| 亚洲精品视频在线免费| 亚洲精品乱码久久久久久V| 四虎永久免费影院在线| 国产精品美女久久久免费| 亚洲av之男人的天堂网站| 青娱乐免费视频在线观看| 99亚洲精品卡2卡三卡4卡2卡| 亚洲欧洲一区二区三区| 免费观看久久精彩视频| 久久精品国产亚洲AV蜜臀色欲 | 久久亚洲一区二区| 5g影院5g天天爽永久免费影院| 亚洲w码欧洲s码免费| 成年女性特黄午夜视频免费看| 校园亚洲春色另类小说合集| 久久精品国产亚洲7777| **真实毛片免费观看| 亚洲av乱码一区二区三区按摩 | 亚洲天堂久久精品| 女性自慰aⅴ片高清免费| 狠狠躁狠狠爱免费视频无码| 亚洲第一成年人网站| 亚洲AV无码乱码在线观看| 99免费在线观看视频| 西西人体大胆免费视频| 久久精品国产亚洲AV高清热 | 亚洲国产精品无码久久一线|