duansky'weblog

          統計

          留言簿(3)

          友情鏈接

          閱讀排行榜

          評論排行榜

          iBatis簡明教程及快速入門

          Batis是又一個O/R Mapping解決方案,j2ee的O/R方案真是多,和Hibernate相比,iBatis最大的特點就是小巧,上手很快。如果你不需要太多復雜的功能,iBatis是能滿足你的要求又足夠靈活的最簡單的解決方案。

          iBatis最大的特點是簡單,最新版本2.0(下載),和1.0相比,主要改動在XML配置文件上,不過,只要有SQL基礎,相信你不用教程也能看明白。下面我們看一個最簡單的例子入門。

          我們先建一個表Account,包括字段username,?varchar(20), pk和password, varchar(20),隨便填入一些數據。然后編寫iBatis必須的配置文件sql-map-config.xml,文件名隨意,內容如下:
          <?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"
          ????maxRequests
          ="32"
          ????maxSessions
          ="10"
          ????maxTransactions
          ="5"
          ????useStatementNamespaces
          ="false"
          ??
          />
          ??
          <transactionManager?type="JDBC"?>
          ????
          <dataSource?type="SIMPLE">
          ??????
          <property?name="JDBC.Driver"?value="sun.jdbc.odbc.JdbcOdbcDriver"/>
          ??????
          <property?name="JDBC.ConnectionURL"?value="jdbc:odbc:Blog"/>
          ??????
          <property?name="JDBC.Username"?value="admin"/>
          ??????
          <property?name="JDBC.Password"?value=""/>
          ????
          </dataSource>
          ??
          </transactionManager>
          ??
          <sqlMap?resource="Account.xml"?/>
          </sqlMapConfig>
          其他部分你不用管它,我是直接copy的示例配置,只需注意紅色部分,配置好數據源即可。我用的是Access,所以用JdbcOdbc驅動。如果你用MySQL或其他數據庫,更改相應的屬性。

          然后注意到這個配置文件還引用了一個Account.xml,沒錯,iBatis把每個需要O/R Mapping的Java對象關聯到一個xml配置文件,我們需要把一個Account表映射到一個Account類:
          package?example;
          public?class?Account?{
          ????
          private?String?username;
          ????
          private?String?password;

          ????
          public?String?getUsername()?{?return?username;?}
          ????
          public?void?setUsername(String?username)?{?this.username=username;?}

          ????
          public?String?getPassword()?{?return?password;?}
          ????
          public?void?setPassword(String?password)?{?this.password=password;?}
          }

          編寫Account.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="Account">

          ??
          <select?id="getAccount"?parameterClass="java.lang.String"?resultClass="example.Account">
          ????select?*?from?Account?where?username?=?#value#
          ??
          </select>

          ??
          <insert?id="createAccount"?parameterClass="example.Account">
          ????insert?into?Account?(username,?password)
          ????values?(?#username#,?#password#?)
          ??
          </insert>
          </sqlMap>
          我 們主要關心紅色部分。以<select ...>為例,這里定義了一個查詢方法,名字為getAccount,傳入參數為String,返回類型resultClass就是 example.Account類,select語句相信你已經很熟悉了,#value#是我們將要傳進去的String。

          <insert... >與之類似,不過注意到#username#和#password#,由于參數是Account類,它們將被 Account.getUsername()和Account.getPassword()替換。所以,只要你會寫SQL,就能非常容易地寫出配置文件。

          最后便是如何使用iBatis實現O/R映射。首先初始化iBatis獲得一個SqlMapClient對象:
          com.ibatis.sqlmap.client.SqlMapClient?sqlMap?=?null;
          ????
          try?{
          ????????java.io.Reader?reader?
          =?om.ibatis.common.resources.Resources.getResourceAsReader?("sql-map-config.xml");
          ????????sqlMap?
          =?SqlMapClientBuilder.buildSqlMapClient(reader);
          ????}
          ?catch?(Exception?e)?{
          ????????e.printStackTrace();
          ????}

          然后就可以異常方便地使用O/R Mapping了,比如查詢username=admin的Account:
          try?{
          ????????Account?accout?
          =?(Account)sqlMap.queryForObject("getAccount",?"admin");
          ????????
          ????}

          或者創建一個新的Account:
          try?{
          ????????Account?account?
          =?new?Account();
          ????????account.setUsername(
          "micheal");
          ????????account.setPassword(
          "1234");
          ????????sqlMap.insert(
          "createAccount",?account);
          ????}

          運行時把兩個配置文件和iBatis的3個jar包放到classpath中,要求jdk1.4版本。

          總 結:iBatis確實簡單靈活,上手容易,代碼很少,配置稍嫌復雜。不足之處一是沒有方便的工具來自動生成xml配置文件,二是不管是query還是 insert都只能傳入一個參數,有時不得不把兩個參數包裝成一個類傳進去。另外對常見的1:1,1:N關系的支持不如Hibernate。不過,大多數 時候iBatis已經完全可以滿足我們的需求。Spring很好的集成了iBatis,你可以參考Spring的JPetStore示例。需要注意的是使 用iBatis 2.0和1.0有較大區別,主要體現在配置文件上,iBatis 2.0新增了DAO框架,不需要Spring提供的DAO也能很方便地實現DAO模式。?

          轉自: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1740022

          posted on 2007-11-07 14:49 duansky 閱讀(521) 評論(0)  編輯  收藏 所屬分類: Java

          主站蜘蛛池模板: 仙游县| 安达市| 宁阳县| 洪江市| 杭锦旗| 佳木斯市| 巩义市| 博白县| 阜南县| 青阳县| 苗栗县| 麻栗坡县| 石泉县| 浦县| 左权县| 湄潭县| 扬州市| 宁晋县| 百色市| 香港| 岳池县| 海林市| 昂仁县| 琼中| 游戏| 泗洪县| 新乡市| 阳谷县| 高唐县| 宾阳县| 杂多县| 客服| 大荔县| 比如县| 紫金县| 南乐县| 朔州市| 奇台县| 沅江市| 宜丰县| 尚义县|