<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 屬性填充。“ #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:11: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 溫柔一刀 閱讀(6617) 評論(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 溫柔一刀
    主站蜘蛛池模板: 亚洲av高清在线观看一区二区| 亚洲精品V天堂中文字幕| 免费看一级做a爰片久久| 最近2022中文字幕免费视频| 一个人看的www在线免费视频| 亚洲中文字幕无码av| 久久久久久亚洲精品中文字幕 | 亚洲熟妇无码八AV在线播放| 免费爱爱的视频太爽了| 亚州免费一级毛片| 成人爽a毛片免费| 深夜特黄a级毛片免费播放| 99亚偷拍自图区亚洲| 亚洲日韩国产精品无码av| 亚洲AV无码乱码在线观看富二代| 日产国产精品亚洲系列| 永久黄网站色视频免费直播| 国产福利在线观看免费第一福利| 免费黄网站在线观看| 免费久久人人爽人人爽av| rh男男车车的车车免费网站| 亚洲av无码兔费综合| 亚洲国产综合精品中文第一| 亚洲美女激情视频| 久久国产亚洲电影天堂| 亚洲精品无码专区久久久| 亚洲av中文无码| 成人亚洲综合天堂| 免费99热在线观看| 亚洲高清无码综合性爱视频| 国产精品成人免费综合| 国产精品成人无码免费| 日韩免费高清视频网站| 国产伦一区二区三区免费 | 日韩亚洲国产高清免费视频| 亚洲一区免费视频| 亚洲AV无码久久久久网站蜜桃| 亚洲天堂一区二区三区| 亚洲一级免费视频| 亚洲日韩一区二区三区| 亚洲av综合av一区二区三区 |