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

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

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

    冰浪

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

    [轉(zhuǎn)]Ibatis開發(fā)Demo

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

    iBatis是又一個O/R Mapping解決方案,j2ee的O/R方案真是多,和Hibernate相比,iBatis最大的特點就是小巧,上手很快。如果你不需要太多復(fù)雜的功能,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">
    <!--模塊配置-->
    <!--設(shè)置本映射文件中的別名-->
    <typeAlias alias="author" type="com.ibatis.Author" />
    <!--
    <cacheModel type="LRU" id="authorCache">
     設(shè)置緩存有效期,如果超出這個時間,則會清空緩存
     <flushInterval hours="24"></flushInterval>
     指定執(zhí)行特定的statement時,清空緩存
     <flushOnExecute statement="updateAuthor"/>
     SIZE:本cacheModel最大容納數(shù)據(jù)對象的數(shù)量
     <property value="1000" name="size"/>
    </cacheModel>
    需要使用模塊配置,如:<select id="getAllAuthor" resultClass="author" cacheModel="authorCache">
    把記錄使用cacheModel“authorCache”進行緩存,以后程序再使用statement進行數(shù)據(jù)查詢,就直接
    去緩存中取數(shù)據(jù),而不是去數(shù)據(jù)庫中取數(shù)據(jù)
    -->
    <!--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>
    <!-- 加載連接數(shù)據(jù)庫屬性文件 -->
    <properties resource="com/ibatis/SqlMapConfig.properties" />
    <!--
    cacheModelsEnabled:是否啟動SqlMapClient的緩存機制。
    enhancementEnabled:是否針對POJO啟用字節(jié)碼增加機制以提升geter/seter的調(diào)用效用,為延遲
         加載帶來了及大的性能提升。
    lazyLoadingEnabled:是否啟用延遲加載機制。
    maxRequests:最大并大請求數(shù)。
    maxSessions:最大Session數(shù),即當(dāng)前最大允許的開發(fā)SqlMapClient數(shù)
    maxTransactions:最大并發(fā)事務(wù)數(shù)。  
    -->
    <settings
    cacheModelsEnabled="true"
    enhancementEnabled="true"
    lazyLoadingEnabled="true"
    maxRequests="32"
    maxSessions="10"
    maxTransactions="5"
    useStatementNamespaces="false"
    />

    <!-- datasource -->
    <transactionManager type="JDBC" >
    <dataSource type="SIMPLE">
    <!--JDBC驅(qū)動-->
    <property name="JDBC.Driver" value="${driver}"/>
    <!--數(shù)據(jù)庫URL-->
    <property name="JDBC.ConnectionURL" value="${url}"/>
    <!--數(shù)據(jù)庫用戶名-->
    <property name="JDBC.Username" value="${username}"/>
    <!--數(shù)據(jù)庫密碼-->
    <property name="JDBC.Password" value="${password}"/>
    <!--不知道,在網(wǎng)站上查不出來,有時間再研究-->
    <property name="JDBC.DefaultAutoCommit" value="true" />
    <!--數(shù)據(jù)庫連接池可維持的最大容量-->
    <property name="Pool.MaximumActiveConnections" value="10"/>
    <!--數(shù)據(jù)庫連接池中允許的可掛起連接數(shù)-->
    <property name="Pool.MaximumIdleConnections" value="5"/>
    <!--數(shù)據(jù)庫連接池中,連接被某個任務(wù)所占用的最大時間-->
    <property name="Pool.MaximumCheckoutTime" value="120000"/>
    <!--當(dāng)線程想從連接池中獲取連接時,連接池中無可用連接,該參數(shù)設(shè)置線程所允許等待的最長時間-->
    <property name="Pool.TimeToWait" value="500"/>
    <!--數(shù)據(jù)庫連接狀態(tài)檢查語句-->
    <property name="Pool.PingQuery" value="select 1 from author"/>
    <!--是否允許檢查連接狀態(tài)-->
    <property name="Pool.PingEnabled" value="false"/>
    <!--對持續(xù)連接超過設(shè)定值的連接進行檢查-->
    <property name="Pool.PingConnectionsOlderThan" value="1"/>
    <!--對空閑超過設(shè)定值的連接進行檢查-->
    <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創(chuàng)建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的核心主建,提供數(shù)據(jù)操作的基礎(chǔ)平臺
     
      return sqlmapclient;
     }
     /**
      * SqlMapClient的另一種創(chuàng)建方式
      * XmlSqlMapClientBuilder xmlbuilder=new XmlSqlMapClientBuilder();
      * SqlMapClient sqlmapclient=xmlbuilder.builderSqlMap(reader);
      * XmlSqlMapClientBuilder是ibatis2.0之后版本新引入的組件,用以取代1.X版本中的
      * XmlSqlMapBuilder,其作用就是創(chuàng)建SqlMapClient。
      */
    }
    第六步:
    package com.ibatis;

    import java.sql.SQLException;
    import java.util.List;
    import java.util.*;
    import com.ibatis.sqlmap.client.SqlMapClient;
    /**
     * ibatis的事務(wù)管理器,目前只支持三種:JDBC,JTA,EXTERNAL
     * JDBC:通過傳統(tǒng)的JDBC CONNECTION.COMIT/rollback實現(xiàn)事務(wù)支持
     * JTA:使用容器提供的JTA服務(wù)實現(xiàn)全局事務(wù)管理
     * EXTERNAL:外部事務(wù)管理,如EJB中使用IBATIS,通過EJB的部署配置即可實現(xiàn)自動的事務(wù)管理機制
     * 。此時IBATIS將把所有的事務(wù)委托給外部容器進行管理
     */
    public class IbatisClient {
     private static SqlMapClient sqlmapclient=SqlMapConf.getInstance();
     //根據(jù)主健ID修改NAME
     public static void updateAuthor(int id,String name){
      Author author=new Author();
         author.setId(id);
         author.setName(name);
         try {
          //事務(wù)開始,用的是JDBC的事務(wù)管理
          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:設(shè)置從第幾條記錄開始
       //1:設(shè)置顯示記錄記錄
       //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: [轉(zhuǎn)]Ibatis開發(fā)Demo  回復(fù)  更多評論   

    2007-08-17 14:26 by b
    bbbbbbbbbbbbbb

    # re: [轉(zhuǎn)]Ibatis開發(fā)Demo  回復(fù)  更多評論   

    2008-05-09 12:11 by haix
    xml文件去哪里了
    主站蜘蛛池模板: 激情内射亚洲一区二区三区| 国产亚洲成AV人片在线观黄桃| 免费国产成人高清视频网站| 免费在线观看亚洲| 亚洲欭美日韩颜射在线二| 亚洲人成网址在线观看| 日韩亚洲国产高清免费视频| 美景之屋4在线未删减免费 | 亚洲爆乳无码精品AAA片蜜桃| 免费无码国产V片在线观看| 中文字幕乱理片免费完整的| 最好看最新的中文字幕免费| 狠狠久久永久免费观看| 在线观看亚洲成人| 亚洲国产精品久久网午夜| 亚洲a∨国产av综合av下载| 三年片免费高清版| 两性刺激生活片免费视频| 全亚洲最新黄色特级网站 | 中文字幕无码免费久久9一区9| 91精品免费不卡在线观看| 永久黄网站色视频免费直播| 亚洲中文久久精品无码ww16| 亚洲卡一卡2卡三卡4麻豆| 草久免费在线观看网站| 2021国内精品久久久久精免费| 国产午夜免费福利红片| 久久久久久久久亚洲| 亚洲欧美日韩中文高清www777| 黄色网址免费在线观看| 色窝窝免费一区二区三区| 国产午夜亚洲精品国产成人小说| 亚洲丰满熟女一区二区v| 一个人看的免费观看日本视频www 一个人看的免费视频www在线高清动漫 | 亚洲日本一区二区一本一道| 亚洲精品中文字幕无乱码| 四虎影视久久久免费| 中文字幕乱码免费视频| 一本色道久久综合亚洲精品高清| 久久精品国产亚洲av麻豆图片| 一个人看的免费高清视频日本|