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

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

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

    e代劍客——溫柔一刀

    生活就像海洋,只有意志堅強的人,才能到達彼岸

       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      76 隨筆 :: 7 文章 :: 215 評論 :: 0 Trackbacks

    最簡單的 iBatis 入門例子? ?? ?

    iBatis 是一個 O/R Mapping 解決方案, iBatis 最大的特點就是小巧,上手很快。如果你不需要太多復雜的功能, iBatis 是能滿足你的要求又足夠靈活的最簡單的解決方案。下面我們看一個最簡單的入門例子,是《 ibatis 開發指南》上的例子改的,不過上面講的不仔細,我開始學的時候搞了一個晚上才把那個例子跑起來的,相信一些朋友也和我一樣,在入門的時候有一點小郁悶,我把整個工程項目打包了供朋友 下載 ,工具是 eclipse3.2+myeclipse5.0 ,導入即可運行,數據庫用的是 MySQL 。也可以改用別的數據庫!??

    先建數據庫和表吧; sql 語句我導出來了:

    /* ?

    SQLyog?企業版?-?MySQL?GUI?v4.1?

    主機?-?5.0.7-beta-nt?:?數據庫?-?sample?

    *********************************************************************?

    服務器版本?:?5.0.7-beta-nt?

    create?database?if?not?exists?`sample`;?

    USE?`sample`;?

    /*?數據表?`t_user`?的表結構
    */
    ?

    drop ? table ? if ? exists ?`t_user`;?

    CREATE ? TABLE ?`t_user`?(?

    ??`id`?
    int ?( 11 )? NOT ? NULL ?auto_increment,?

    ??`?name?`?
    varchar ?( 50 )? default ? NULL ?,?

    ??`sex`?
    int ?( 11 )? default ? NULL ?,?

    ??
    PRIMARY ? KEY ???(`id`)?

    )?ENGINE
    = InnoDB? DEFAULT ?CHARSET = latin1;?

    /* ?數據表?`t_user`?的數據 */ ?

    insert ? into ?`t_user`? values ?( 1 ,? ' zhupan ' ?, 1 ),( 2 ,? ' zhupan ' ?, 2 ),( 3 ,? ' 3 ' ?, 3 ),( 4 ,? ' 4 ' ?, 4 ),( 5 ,? ' 5 ' ?, 5 );?


    整個工程目錄結構如下:??(圖片未能顯示,附件里面有)

    lib 包下面的文件:??(圖片未能顯示,附件里面有)

    下面開始編寫每個文件:??

    編寫 iBatis 必須的配置文件 SqlMapConfig.xml ,放在包 com.ctgusec.zhupan.maps 下,文件名可以任意改,內容如下:

    <? ?xml?version?=?"1.0"?encoding?=?"UTF-8"? ?> ?

    <! ?DOCTYPE?sqlMapConfig?

    ????PUBLIC?"-//iBATIS.com//DTD?SQL?Map?Config?2.0//EN"?

    ????"http://www.ibatis.com/dtd/sql-map-config-2.dtd"?
    > ?

    < ?sqlMapConfig? > ?

    ????
    < ?settings? cacheModelsEnabled? =?"true" ?enhancementEnabled? =?"true" ?

    ????????lazyLoadingEnabled?
    =?"true" ?errorTracingEnabled? =?"true" ?maxRequests? =?"32" ?

    ????????maxSessions?
    =?"10" ?maxTransactions? =?"5" ?useStatementNamespaces? =?"false" ? /> ?

    ??

    ????
    < ?transactionManager? type? =?"JDBC" ? > ?

    ????????
    < ?dataSource? type? =?"SIMPLE" ? > ?

    ????????????
    < property? name ="JDBC.Driver" ?value ="com.mysql.jdbc.Driver" ? /> ?

    ???????????
    < property? name ="JDBC.ConnectionURL" ????value ="jdbc:mysql://localhost/sample" ? /> ?

    ???????????
    < property? name ="JDBC.Username" ?value ="root" ? /> ?

    ???????????
    < property? name ="JDBC.Password" ?value ="" ? /> ?

    ????????????
    < ?property? name? =?"Pool.MaximumActiveConnections" ?value? =?"10" ? /> ?

    ????????????
    < ?property? name? =?"Pool.MaximumIdleConnections" ?value? =?"5" ? /> ?

    ????????????
    < ?property? name? =?"Pool.MaximumCheckoutTime" ?value? =?"120000" ? /> ?

    ????????????
    < ?property? name? =?"Pool.TimeToWait" ?value? =?"500" ? /> ?

    ????????????
    < ?property? name? =?"Pool.PingQuery" ?value? =?"select?1?from?sample" ? /> ?

    ????????????
    < ?property? name? =?"Pool.PingEnabled" ?value? =?"false" ? /> ?

    ????????????
    < ?property? name? =?"Pool.PingConnectionsOlderThan" ?value? =?"1" ? /> ?

    ????????????
    < ?property? name? =?"Pool.PingConnectionsNotUsedFor" ?value? =?"1" ? /> ?

    ????????
    </ ?dataSource? > ?

    ????
    </ ?transactionManager? > ?

    ????
    < ?sqlMap? resource? =?"com/ctgusec/zhupan/maps/User.xml" ? /> ?

    </ ?sqlMapConfig? > ?

    如果不用 mysql 數據庫,需要重新配置數據源(紅色加粗字體標出),更改相應的屬性即可。

    然后注意到這個配置文件還引用了一個 User.xml , iBatis 把每個需要 O/R Mapping Java 對象關聯到一個 xml 配置文件,我們需要把 t_user 表映射到一個 User 類:

    package ?com.ctgusec.zhupan.model;?

    import ?java.io.Serializable;?

    ??

    public ? class ?User? implements ?Serializable? {?

    ??

    ????
    /** ?

    ??????*?
    @author ?zhupan?

    ??????
    */
    ?

    ????
    private ? static ? final ? long ?serialVersionUID? = ? 1L ;?

    ??

    ????
    private ?Integer?id?;?

    ??

    ????
    private ?String?name?;?

    ??

    ????
    private ?Integer?sex?;?

    ????

    ????
    public ?User()? {?

    ????}
    ?

    ??

    ????
    public ?Integer?getId()? {?

    ????????
    return ? this ?.?id?;?

    ????}
    ?

    ??

    ????
    public ? void ?setId(Integer?id)? {?

    ????????
    this ?.?id? = ?id;?

    ????}
    ?

    ??

    ????
    public ?String?getName()? {?

    ????????
    return ? this ?.?name?;?

    ????}
    ?

    ??

    ????
    public ? void ?setName(String?name)? {?

    ????????
    this ?.?name? = ?name;?

    ????}
    ?

    ??

    ????
    public ?Integer?getSex()? {?

    ????????
    return ? this ?.?sex?;?

    ????}
    ?

    ??

    ????
    public ? void ?setSex(Integer?sex)? {?

    ????????
    this ?.?sex? = ?sex;?

    ????}
    ?

    }
    ?


    編寫 User.xml 文件:

    <? ?xml?version?=?"1.0"?encoding?=?"UTF-8"? ?> ?

    ??

    <! ?DOCTYPE?sqlMap?

    ????PUBLIC?"-//iBATIS.com//DTD?SQL?Map?2.0//EN"?

    ????"http://www.ibatis.com/dtd/sql-map-2.dtd"?
    > ?

    ??

    < ?sqlMap? namespace? =?"User" ? > ?

    ??

    ????
    < ?typeAlias? alias? =?"user" ?type? =?"com.ctgusec.zhupan.model.User" ? /> ?

    ????
    < ?select? id? =?"getUser" ?parameterClass? =?"java.lang.String" ?

    ????????resultClass?
    =?"user" ? > ?

    ????????
    <![CDATA[ ?????select??name,??sex???from?t_user???where?name?=?#name#??? ]]> ?

    ????
    </ ?select? > ?

    ????

    ????
    < ?select? id? =?"getAllUser" ?resultClass? =?"user" ? > ?

    ????????
    <![CDATA[ ????select???name,??sex??from?t_user?? ]]> ?

    ????
    </ ?select? > ?

    ??

    ????
    < ?update? id? =?"updateUser" ?parameterClass? =?"user" ? > ?

    ????????
    <![CDATA[ ????UPDATE?t_user??SET?name=#name#,?sex=#sex#?WHERE?id?=?#id#? ]]> ?

    ????
    </ ?update? > ?

    ??

    ????
    < ?insert? id? =?"insertUser" ?parameterClass? =?"user" ? > ?

    ????????INSERT?INTO?t_user?(?name,?sex)?VALUES?(?#name#,?#sex#?)?
    </ ?insert? > ?

    ??

    ????
    < ?delete? id? =?"deleteUser" ?parameterClass? =?"java.lang.String" ? > ?

    ????????delete?from?t_user?where?id=#value#?

    ????
    </ ?delete? > ?

    </ ?sqlMap? >

    通過 <insert> <delete> 、 <update> 、 <select> 節點,分別定義了針對 TUser 對象的增刪改查操作。在這些節點中,我們指定了對應的 SQL 語句: ID 指定了操作 ID ,之后我們可以在代碼中通過指定操作 id 來執行此節點所定義的操作,如: sqlMap.update("updateUser",user);?? ID 設定使得在一個配置文件中定義兩個同名節點成為可能(兩個 update 節點,以不同 id 區分) parameterClass 指定 需的 類型 , 此例 update com.ctgusec.zhupan.model .User 類型的對象作為參數,目標是將提供的 User 實例更新到數據庫。 parameterClass="user" 中, user 為“ com.ctgusec.zhupan.model.User ”類的別名,別名可通過 typeAlias 節點指定,如示例配置文件中的: <typeAlias alias="user" type="com.ctgusec.zhupan.model.User"/> #name# ”在運行期會由傳入的 user 對象的 name 屬性填充。 #sex# ”,將在運行期由傳入的 user 對象的 sex 屬性填充?!?/span> #id# ”,將在運行期由傳入的 user 對象的 id 屬性填充。??

    只要你會寫 SQL ,就能非常容易地寫出配置文件。

    最后便是如何使用 iBatis 實現 O/R 映射 , 測試給個例子:

    package ?com.ctgusec.zhupan;???

    import ?java.sql.SQLException;?

    import ?java.util.List;???

    import ?com.ctgusec.zhupan.model.User;?

    import ?com.ibatis.sqlmap.client.SqlMapClientBuilder;???

    /** ?

    ?*?

    ?*?
    @author ?zhupan?

    ?
    */
    ?

    public ? class ?ExampleMain? {?

    ??

    ???????
    public ? static ? void ?update()? {?

    ??????????????
    // ?首先初始化?iBatis?獲得一個?SqlMapClient?對象?

    ??????????????String?resource?
    = ? " com/ctgusec/zhupan/maps/SqlMapConfig.xml " ;?

    ??????????????com.ibatis.sqlmap.client.SqlMapClient?sqlMap?
    = ? null ;?

    ??????????????
    try ? {?

    ?????????????????????java.io.Reader?reader?
    = ?com.ibatis.common.resources.Resources.getResourceAsReader(resource);?

    ?????????????????????sqlMap?
    = ?SqlMapClientBuilder.buildSqlMapClient(reader);?

    ??????????????}
    ? catch ?(Exception?e)? {?

    ?????????????????????e.printStackTrace();?

    ??????????????}
    ?

    ??????????????
    // ?sqlMap?系統初始化完畢,開始執行?update?操作?

    ??????????????
    try ? {?

    ?????????????????????sqlMap.startTransaction();?

    ?????????????????????User?user?
    = ? new ?User();?

    ?????????????????????user.setId(
    new ?Integer( 1 ));?

    ?????????????????????user.setName(
    " zhupan " );?

    ?????????????????????user.setSex(
    new ?Integer( 1 ));?

    ?????????????????????sqlMap.update(
    " updateUser " ,?user);?

    ?????????????????????sqlMap.commitTransaction();?

    ??????????????}
    ? catch ?(SQLException?e)? {?

    ?????????????????????System.out.println(e.getMessage());?

    ??????????????}
    ? finally ? {?

    ?????????????????????
    try ? {?

    ????????????????????????????sqlMap.endTransaction();?

    ?????????????????????}
    ? catch ?(SQLException?e)? {?

    ????????????????????????????e.printStackTrace();?

    ?????????????????????}
    ?

    ??????????????}
    ?

    ???????}
    ?

    ???????
    public ? static ?List?getUser()? {?

    // ????????????首先初始化?iBatis?獲得一個?SqlMapClient?對象?

    ??????????????String?resource?
    = ? " com/ctgusec/zhupan/maps/SqlMapConfig.xml " ;?

    ??????????????com.ibatis.sqlmap.client.SqlMapClient?sqlMap?
    = ? null ;?

    ??????????????List?user
    = null ;?

    ??????????????
    try ? {?

    ?????????????????????java.io.Reader?reader?
    = ?com.ibatis.common.resources.Resources.getResourceAsReader(resource);?

    ?????????????????????sqlMap?
    = ?SqlMapClientBuilder.buildSqlMapClient(reader);?

    ??????????????}
    ? catch ?(Exception?e)? {?

    ?????????????????????e.printStackTrace();?

    ??????????????}
    ?

    ??????????????
    // ?sqlMap?系統初始化完畢,開始執行?getAllUser?操作?

    ??????????????
    try ? {?

    ?????????????????????sqlMap.startTransaction();?????????????????????????

    ?????????????????????user
    = sqlMap.queryForList( " getAllUser " ,? null );?

    ?????????????????????sqlMap.commitTransaction();?

    ??????????????}
    ? catch ?(SQLException?e)? {?

    ?????????????????????System.out.println(e.getMessage());?

    ??????????????}
    ? finally ? {?

    ?????????????????????
    try ? {?

    ????????????????????????????sqlMap.endTransaction();?

    ?????????????????????}
    ? catch ?(SQLException?e)? {?

    ????????????????????????????e.printStackTrace();?

    ?????????????????????}
    ?

    ??????????????}
    ?

    ??????????????
    return ?user;?

    ???????}
    ?

    ???????
    public ? static ? void ?main(String[]?args)? {?

    ??????????????update();?

    ??????????????List?user
    = getUser();???????

    ??????????????
    for ( int ?i = 0 ;i < user.size();i ++ )?

    ??????????????
    {?

    ?????????????????????System.out.println(((User)user.get(i)).getName());?

    ??????????????}
    ?

    ???????}
    ?

    }
    ?


    運行時把 lib 包下的所有 .jar 構建到路徑中,操作如下:?(圖片未能顯示,附件里面有)?

    點擊???(圖片未能顯示,附件里面有)??找到.jar文件全部選中,確認即可??

    總結:iBatis確實簡單靈活,上手容易,代碼很少,配置稍嫌復雜。動態SQL的確是個強點,熟悉后感覺很不錯。iBatis中所有的DAO方法都只傳一個值對象,復雜查詢當然也不例外。另外對常見的1:1,1:N關系的支持不如Hibernate。使用iBatis 2.01.0有較大區別,主要體現在配置文件上,iBatis 2.0新增了DAO框架,不需要Spring提供的DAO也能很方便地實現DAO模式。持久層使用了iBatis后,團隊中以前亂七八糟的jdbc包裝不見了,大家的編碼風格統一了,可以集中精力進行業務組件的編寫!??

    源文件下載 進入頁面: http://ctguzhupan.go1.icpcn.com/ibatis/ibatis.html? ?

    參考文獻: ibatis 開發指南》??

    Ps :第一次寫這東西,表達能力實在不怎么樣!結合《 ibatis 開發指南》會更容易明白!有不明白的地方也可以聯系我,我將盡力幫助,有錯誤地方也請指正,謝謝!

    blog e代劍客 ??? email zhupanjava@gmail.com? ?

    e代劍客 2006 8 1 完成于 三峽大學軟件工程中心

    posted on 2006-08-11 14:05 溫柔一刀 閱讀(6614) 評論(16)  編輯  收藏 所屬分類: 開源框架

    評論

    # re: 最簡單的iBatis入門例子 2006-08-11 15:16 溫柔一刀
    昏,圖片搞不上來啊  回復  更多評論
      

    # re: 最簡單的iBatis入門例子 2006-08-12 10:47 溫柔一刀
    源文件和說明文件也可以到群4799157共享里面下載  回復  更多評論
      

    # re: iBatis入門例子 2006-08-12 11:18 testffff
    不錯,很順利的運行通過  回復  更多評論
      

    # re: 最簡單的iBatis入門例子 2006-08-12 11:19 testffff
    是純java工程啊,有沒有web的?  回復  更多評論
      

    # re: 最簡單的iBatis入門例子 2006-08-12 13:51 溫柔一刀
    @testffff
    過幾天閑下來了再寫一個spring+ibatis的簡單入門例子
      回復  更多評論
      

    # re: 最簡單的iBatis入門例子 2006-08-13 18:37 方法學
    收藏  回復  更多評論
      

    # re: 最簡單的iBatis入門例子 2006-10-04 12:32 zengliangzhu
    受益匪淺讓我省去了很多時間入門
    感謝萬分,希望有好的作品請郵件方式通知我  回復  更多評論
      

    # re: 最簡單的iBatis入門例子 2006-12-10 20:37 浩境
    最好有Struts+Spring+ibatis的簡單入門例子
    Spring+ibatis  回復  更多評論
      

    # re: 最簡單的iBatis入門例子 2006-12-16 12:02 溫柔一刀
    @浩境
    一樣的,把springmvc換成struts就行了  回復  更多評論
      

    # re: 最簡單的iBatis入門例子 2007-02-23 16:58 inthewater0
    謝謝提供  回復  更多評論
      

    # re: 最簡單的iBatis入門例子 2007-06-11 17:46 kk
    謝謝!  回復  更多評論
      

    # re: 最簡單的iBatis入門例子 2007-07-17 10:19 davy
    非常感謝.
      回復  更多評論
      

    # re: 最簡單的iBatis入門例子 2007-08-16 11:04 kfc
    謝謝..  回復  更多評論
      

    # re: 最簡單的iBatis入門例子 2008-04-22 16:19 cainiao
    十分感謝  回復  更多評論
      

    # re: 最簡單的iBatis入門例子 2008-07-13 09:22 roben
    謝謝~!
    非常不錯。
    是一個很好的捷徑~!  回復  更多評論
      

    # re: 最簡單的iBatis入門例子 2009-06-20 16:56 居士
    很好的例子  回復  更多評論
      

    聯系偶 zhupanjava@gmail.com 溫柔一刀
    主站蜘蛛池模板: 最近免费中文字幕大全高清大全1| 国产成人亚洲综合色影视| 国产精品免费一区二区三区四区| 亚洲欧美日韩自偷自拍| 亚洲AV午夜福利精品一区二区| 国产麻豆免费观看91| 真实国产乱子伦精品免费| 好吊色永久免费视频大全| 精品成人一区二区三区免费视频| 亚洲国产成人在线视频| 亚洲国产精品久久久久久| 国产亚洲日韩在线三区| 成人伊人亚洲人综合网站222| 啦啦啦中文在线观看电视剧免费版 | 四虎免费在线观看| 120秒男女动态视频免费| a级毛片免费播放| 国产va免费观看| 免费无毒a网站在线观看| 亚洲高清乱码午夜电影网| 亚洲中文字幕无码爆乳app| 亚洲国产精品综合久久久| 亚洲综合日韩中文字幕v在线| 亚洲av无码潮喷在线观看| 亚洲乱码无码永久不卡在线| 亚洲视频在线一区二区| 亚洲AV无码成人精品区大在线| 日本不卡视频免费| 国产区卡一卡二卡三乱码免费| 精品无码国产污污污免费| 无码中文字幕av免费放| 成年在线观看网站免费| 青青视频观看免费99| 日本高清在线免费| 国产精品1024永久免费视频| 亚洲网站在线免费观看| 曰批视频免费40分钟试看天天| 57pao一国产成永久免费| 国产成人精品免费视频动漫| 97碰公开在线观看免费视频| 台湾一级毛片永久免费|