冰浪

          哥已不再年輕 - 堅定夢想,畢生追求!
          posts - 85, comments - 90, trackbacks - 0, articles - 3
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          [轉]Ibatis開發Demo

          Posted on 2007-04-11 16:08 冰浪 閱讀(1522) 評論(2)  編輯  收藏 所屬分類: Frameworks

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


          第一步:
          package com.ibatis;

          public class Author {
           private int id;
           private String name;
           public int getId() {
            return id;
           }
           public void setId(int id) {
            this.id = id;
           }
           public String getName() {
            return name;
           }
           public void setName(String name) {
            this.name = name;
           }
          }
          第二步:author.xml
          <?xml version="1.0" encoding="UTF-8" ?>
          <!DOCTYPE sqlMap
          PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
          "<sqlMap namespace="Author">
          <!--模塊配置-->
          <!--設置本映射文件中的別名-->
          <typeAlias alias="author" type="com.ibatis.Author" />
          <!--
          <cacheModel type="LRU" id="authorCache">
           設置緩存有效期,如果超出這個時間,則會清空緩存
           <flushInterval hours="24"></flushInterval>
           指定執行特定的statement時,清空緩存
           <flushOnExecute statement="updateAuthor"/>
           SIZE:本cacheModel最大容納數據對象的數量
           <property value="1000" name="size"/>
          </cacheModel>
          需要使用模塊配置,如:<select id="getAllAuthor" resultClass="author" cacheModel="authorCache">
          把記錄使用cacheModel“authorCache”進行緩存,以后程序再使用statement進行數據查詢,就直接
          去緩存中取數據,而不是去數據庫中取數據
          -->
          <!--Statement配置-->
          <!--修改-->
          <update id="updateAuthor" parameterClass="author">
           <![CDATA[UPDATE author SET name=#name# WHERE id=#id#]]>
          </update>
          <!--刪除-->
          <delete id="deleteAuthor" parameterClass="author">
            delete from author WHERE id = #id#
          </delete>
          <!--查詢所有的記錄-->
          <select id="getAllAuthor" resultClass="author">
           <![CDATA[SELECT * FROM author]]>
          </select>
          <!--添加-->
          <insert id="insertAuthor" parameterClass="author">
           <![CDATA[INSERT INTO author(id,name) VALUES(#id#,#name#)]]>
          </insert>
          </sqlMap>
          第三步:SqlMapConfig.properties
          driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
          url=jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=ibatis
          username=sa
          password=
          第四步:SqlMapConfig.xml
          <?xml version="1.0" encoding="UTF-8" ?>
          <!DOCTYPE sqlMapConfig
          PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
          "
          <!-- Ibatis配置文件-->
          <sqlMapConfig>
          <!-- 加載連接數據庫屬性文件 -->
          <properties resource="com/ibatis/SqlMapConfig.properties" />
          <!--
          cacheModelsEnabled:是否啟動SqlMapClient的緩存機制。
          enhancementEnabled:是否針對POJO啟用字節碼增加機制以提升geter/seter的調用效用,為延遲
               加載帶來了及大的性能提升。
          lazyLoadingEnabled:是否啟用延遲加載機制。
          maxRequests:最大并大請求數。
          maxSessions:最大Session數,即當前最大允許的開發SqlMapClient數
          maxTransactions:最大并發事務數。  
          -->
          <settings
          cacheModelsEnabled="true"
          enhancementEnabled="true"
          lazyLoadingEnabled="true"
          maxRequests="32"
          maxSessions="10"
          maxTransactions="5"
          useStatementNamespaces="false"
          />

          <!-- datasource -->
          <transactionManager type="JDBC" >
          <dataSource type="SIMPLE">
          <!--JDBC驅動-->
          <property name="JDBC.Driver" value="${driver}"/>
          <!--數據庫URL-->
          <property name="JDBC.ConnectionURL" value="${url}"/>
          <!--數據庫用戶名-->
          <property name="JDBC.Username" value="${username}"/>
          <!--數據庫密碼-->
          <property name="JDBC.Password" value="${password}"/>
          <!--不知道,在網站上查不出來,有時間再研究-->
          <property name="JDBC.DefaultAutoCommit" value="true" />
          <!--數據庫連接池可維持的最大容量-->
          <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 author"/>
          <!--是否允許檢查連接狀態-->
          <property name="Pool.PingEnabled" value="false"/>
          <!--對持續連接超過設定值的連接進行檢查-->
          <property name="Pool.PingConnectionsOlderThan" value="1"/>
          <!--對空閑超過設定值的連接進行檢查-->
          <property name="Pool.PingConnectionsNotUsedFor" value="1"/>
          </dataSource>
          </transactionManager>
          <!--加載SqlMap文件-->
          <sqlMap resource="com/ibatis/author.xml" />
          </sqlMapConfig>
          第五步:
          package com.ibatis;

          import java.io.IOException;
          import java.io.Reader;

          import com.ibatis.common.resources.Resources;
          import com.ibatis.sqlmap.client.SqlMapClient;
          import com.ibatis.sqlmap.client.SqlMapClientBuilder;
          public class SqlMapConf {
           //初始化SqlMapClient
           private static SqlMapClient sqlmapclient;
           static{
            //定義ibatis配置文件的路徑
            String resource="com/ibatis/SqlMapConfig.xml";
            try {
             //讀取ibatis配置文件
             Reader reader=Resources.getResourceAsReader(resource);
             //通過SqlMapClientBuilder創建SqlMapClient
             sqlmapclient=SqlMapClientBuilder.buildSqlMapClient(reader);
            } catch (IOException e) {
             // TODO Auto-generated catch block
             System.out.println("找不到SqlMapConfig.xml文件~~");
            }
           }
           public static SqlMapClient getInstance(){
            //返回sqlmapclient,SqlMapClient是ibatis的核心主建,提供數據操作的基礎平臺
           
            return sqlmapclient;
           }
           /**
            * SqlMapClient的另一種創建方式
            * XmlSqlMapClientBuilder xmlbuilder=new XmlSqlMapClientBuilder();
            * SqlMapClient sqlmapclient=xmlbuilder.builderSqlMap(reader);
            * XmlSqlMapClientBuilder是ibatis2.0之后版本新引入的組件,用以取代1.X版本中的
            * XmlSqlMapBuilder,其作用就是創建SqlMapClient。
            */
          }
          第六步:
          package com.ibatis;

          import java.sql.SQLException;
          import java.util.List;
          import java.util.*;
          import com.ibatis.sqlmap.client.SqlMapClient;
          /**
           * ibatis的事務管理器,目前只支持三種:JDBC,JTA,EXTERNAL
           * JDBC:通過傳統的JDBC CONNECTION.COMIT/rollback實現事務支持
           * JTA:使用容器提供的JTA服務實現全局事務管理
           * EXTERNAL:外部事務管理,如EJB中使用IBATIS,通過EJB的部署配置即可實現自動的事務管理機制
           * 。此時IBATIS將把所有的事務委托給外部容器進行管理
           */
          public class IbatisClient {
           private static SqlMapClient sqlmapclient=SqlMapConf.getInstance();
           //根據主健ID修改NAME
           public static void updateAuthor(int id,String name){
            Author author=new Author();
               author.setId(id);
               author.setName(name);
               try {
                //事務開始,用的是JDBC的事務管理
                sqlmapclient.startTransaction();
             sqlmapclient.update("updateAuthor",author);
             sqlmapclient.commitTransaction();
            } catch (SQLException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
             System.out.println("修改錯誤~~");
            }
            finally{
             try {
              sqlmapclient.endTransaction();
             } catch (SQLException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
             }
            }
           }
           //查詢所有的記錄,返回一個集合
           public static List findAll(){
            List list=null;
            try {
             sqlmapclient.startTransaction();
             //0:設置從第幾條記錄開始
             //1:設置顯示記錄記錄
             //list=sqlmapclient.queryForList("getAllAuthor",null,0,1);
             list=sqlmapclient.queryForList("getAllAuthor",null);
             sqlmapclient.commitTransaction();
            } catch (SQLException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
             System.out.println("查詢錯誤~~");
            }
            finally{
             try {
              sqlmapclient.endTransaction();
             } catch (SQLException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
             }
            }
            return list;
           }
           //添加操作
           public static boolean insert(int id,String name){
            boolean bool=false;
            Author author=new Author();
            author.setId(id);
            author.setName(name);
            try {
             sqlmapclient.startTransaction();
             sqlmapclient.insert("insertAuthor",author);
             bool=true;
             sqlmapclient.commitTransaction();
            } catch (SQLException e) {
             // TODO Auto-generated catch block
             bool=false;
             e.printStackTrace();
             System.out.println("添加錯誤~~");
            }
            finally{
             try {
              sqlmapclient.endTransaction();
             } catch (SQLException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
             }
            }
            return bool;
           }
           //刪除操作
           public static boolean delete(int id){
            boolean bool=false;
            Author author=new Author();
            author.setId(id);
            try {
             sqlmapclient.commitTransaction();
             sqlmapclient.delete("deleteAuthor",author);
             bool=true;
             sqlmapclient.startTransaction();
            } catch (SQLException e) {
             // TODO Auto-generated catch block
             bool=false;
             e.printStackTrace();
             System.out.println("刪除錯誤~~");
            }
            finally{
             try {
              sqlmapclient.endTransaction();
             } catch (SQLException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
             }
            }
            return bool;
           }
              public static void main(String str[]){
               //刪除
               //boolean bool=IbatisClient.delete(3);
               //添加
               //boolean bool=IbatisClient.insert(3,"wanwu");
               //修改
               //IbatisClient.updateAuthor(3,"jj");
               //查詢所有的記錄
               List list=IbatisClient.findAll();
               Iterator iterator=list.iterator();
               while(iterator.hasNext()){
                Author author=(Author)iterator.next();
                System.out.println("ID ="+author.getId());
                System.out.println("NAME ="+author.getName());
               }
              }
          }
          以上是一個簡單的Ibatis的增,刪,改查的例子


           


          評論

          # re: [轉]Ibatis開發Demo  回復  更多評論   

          2007-08-17 14:26 by b
          bbbbbbbbbbbbbb

          # re: [轉]Ibatis開發Demo  回復  更多評論   

          2008-05-09 12:11 by haix
          xml文件去哪里了
          主站蜘蛛池模板: 兴隆县| 黄骅市| 大姚县| 河北区| 辉县市| 哈巴河县| 娄烦县| 巴林右旗| 阳新县| 宜春市| 上蔡县| 阳春市| 西丰县| 台中市| 忻城县| 玉环县| 塔河县| 大渡口区| 璧山县| 和林格尔县| 乡宁县| 上思县| 东台市| 大荔县| 海淀区| 安宁市| 咸阳市| 高碑店市| 洪湖市| 鹤壁市| 丁青县| 迭部县| 平谷区| 万山特区| 思茅市| 东山县| 抚顺县| 依安县| 涿州市| 牙克石市| 历史|