Java Architect

          導(dǎo)航

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統(tǒng)計(jì)

          常用鏈接

          留言簿(2)

          隨筆檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          2008年6月19日 #

          關(guān)于SAAS平臺(tái)的一點(diǎn)想法

          最近研究了幾個(gè)ERP,CRM的產(chǎn)品 象Sales force, Compeire, sugarCRM,覺得SAAS平臺(tái)無(wú)非需要提供以下可以高度定制的功能。

          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
           
          我覺得這里面最難的應(yīng)屬GUI的高度可定制化。本人正在想用GWT來(lái)做一個(gè)基于上面想法的SASS平臺(tái),屆時(shí)軟件可真正實(shí)現(xiàn)快速按需打造。歡迎JAVA界的同仁多提寶貴建議。






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

          2007年9月8日 #

          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 閱讀(154) | 評(píng)論 (0)編輯 收藏

          2007年7月27日 #

          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 閱讀(196) | 評(píng)論 (0)編輯 收藏

          2006年8月13日 #

          DAO終結(jié)者

          動(dòng)態(tài)組裝SQL是實(shí)際應(yīng)用中的一個(gè)常見問題,我發(fā)現(xiàn)在很多論壇中的解決方案都不干淨(jìng),下面是我在很多項(xiàng)目中使用的方案,簡(jiǎn)潔有效.

          基本概念如下:

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

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

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

          處理過程如下:

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

          ? Tips: 這里還可生成一個(gè)完全可執(zhí)行的 SQL 語(yǔ)句輸出到 LOG , 以便進(jìn)行除錯(cuò);
          5.執(zhí)行SQL, reflection技術(shù)將ResultSet轉(zhuǎn)換成voList;

          ?

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

          我相信此方法 比起 iBatis, Spring jdbcTemplate,Hibernate Criteria 要容易使用得多 . 其實(shí) Hibernate HQL, 也可以用此方法來(lái)動(dòng)態(tài)生成 HQL.
          ?

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

          僅列出標(biāo)題  
          主站蜘蛛池模板: 高清| 新晃| 台前县| 城固县| 内江市| 永春县| 安岳县| 瑞安市| 樟树市| 石阡县| 仁怀市| 峨边| 通山县| 宜州市| 平昌县| 道孚县| 六枝特区| 红原县| 赫章县| 荔波县| 高要市| 清流县| 迁西县| 承德县| 普格县| 长岭县| 东乌珠穆沁旗| 屯留县| 鄂温| 信丰县| 富川| 西峡县| 甘泉县| 高密市| 贵州省| 黄浦区| 深圳市| 祁连县| 晋中市| 奈曼旗| 老河口市|