<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)

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    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 on 2006-08-13 09:35 zrq 閱讀(254) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产成人精品免费午夜app| 国产午夜无码精品免费看| 成年18网站免费视频网站| 亚洲视频在线免费播放| 一级成人a毛片免费播放| 中文无码亚洲精品字幕| 免费人成在线观看播放国产 | 最好看的中文字幕2019免费| 久久亚洲国产伦理| 久久青草免费91线频观看不卡| 亚洲av无码潮喷在线观看| 无码国产精品一区二区免费16| 2022年亚洲午夜一区二区福利| 青青草原1769久久免费播放| 亚洲国产精品久久久久网站| 24小时日本韩国高清免费| 亚洲一区二区三区播放在线| 九九九精品成人免费视频| 亚洲AV无码一区二区三区电影| 免费人成激情视频| 女同免费毛片在线播放| 亚洲黄色免费网址| 成人免费视频软件网站| 免费无毒a网站在线观看| 在线亚洲97se亚洲综合在线| 97在线视频免费| 亚洲女子高潮不断爆白浆| 亚洲AV日韩精品久久久久久久| 精品一区二区三区免费毛片爱 | 亚洲国产综合91精品麻豆| 成人免费在线看片| 亚洲Av无码国产一区二区| 亚洲精品国精品久久99热一| jjizz全部免费看片| 理论秋霞在线看免费| 亚洲AV中文无码字幕色三| 成人午夜免费福利| 久久免费高清视频| 亚洲精品理论电影在线观看 | 国产精品亚洲专区在线观看 | 亚洲AV无码一区二区三区性色 |