瘋狂

          STANDING ON THE SHOULDERS OF GIANTS
          posts - 481, comments - 486, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          ibatis學習(二)--ibatis使用介紹

          Posted on 2007-12-07 18:27 瘋狂 閱讀(30735) 評論(2)  編輯  收藏
           

          SqlMapClient對象

          這個對象是iBatis操作數據庫的接口(執行CRUD等操作),它也可以執行事務管理等操作。這個類是我們使用iBATIS的最主要的類。它是線程安全的。通常,將它定義為單例。(與hibernatesessionFactory的定義類似)。如:

          import java.io.Reader;

          import com.ibatis.common.resources.Resources;

          import com.ibatis.sqlmap.client.SqlMapClient;

          import com.ibatis.sqlmap.client.SqlMapClientBuilder;

          public class IbatisSQLMapConfig {

              private static final SqlMapClient sqlMap;

              //在靜態區塊中初試化返回

              static {

                  try {

                      //聲明配置文件的名稱(映射文件被定義在其中)

                      String resource = "sql_map_config.xml";

                      //利用工具類Resources來讀取到配置文件

                      Reader reader = Resources.getResourceAsReader(resource);

                      //創建SqlMapClient接口的變量實例

                      sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);

                  } catch (Exception e) {

                      e.printStackTrace();

                      throw new RuntimeException(

                              "Error initializing MyAppSqlConfig class. Cause: " + e);

                  }

              }

              public static SqlMapClient getSqlMapInstance() {

                  //提供靜態方法返回靜態區塊中得到的SqlMapClient

                  return sqlMap;

              }

          }

          主要用法:

          如何獲得剛插入記錄的自增長ID值?

          以下所有虛線上面代表User.xml中的內容,虛線下方是測試類中的內容:User類沿用上一篇中的User

           <insert id="insertUser" parameterClass="User">

            insert into t_user values (

                 null,#username#,#password#

            )

            <selectKey resultClass="int" keyProperty="id">

                 SELECT @@IDENTITY AS ID

            </selectKey> 

           </insert>

                 User user = new User();

                 user.setUsername("張三");

                 user.setPassword("張三密碼");

                

                 //如果主鍵是自動生成的,則其返回值可以通過<selectKey>標簽來設置

                 //如果不通過<selectKey>標簽來設置,則返回值為空!

                 //<selectKey >中的keyProperty,是指定User中的id屬性,當調用結束之后,

                 //user對象的id值和insert方法的返回值都是這條記錄的ID值!

                 Object obj = sqlMapper.insert("insertUser", user);

          parameterClass的使用

           <insert id="insertUser" parameterClass="User">

            insert into t_user values (

                 null,#username#,#password#

            )

            <selectKey resultClass="int" keyProperty="id">

                 SELECT @@IDENTITY AS ID

            </selectKey> 

           </insert>

           

           <insert id="insertUser2">

            insert into t_user values (

                 null,#username#,#password#

            )

            <selectKey resultClass="int" keyProperty="id">

                 SELECT @@IDENTITY AS ID

            </selectKey> 

           </insert>

          insertUser使用了parameterClass,所以必需傳入User類型的對象

                 User user = new User();

                 user.setUsername("張三");

                 user.setPassword("張三密碼");

                

                 //傳遞進去的對象,必須是User類型

                 Object obj = sqlMapper.insert("insertUser", user);

          insertUser2沒有使用parameterClass,所以可以傳入任意具有相應屬性值的對象

                 JustAnObject anobj = new JustAnObject();

                 anobj.setUsername("用戶名");

                 anobj.setPassword("用戶密碼");

                

                 //如果沒有指定parameterClass屬性,則任何一個具有相應屬性值

                 //的對象都可以被傳遞進去

                 Object obj = sqlMapper.insert("insertUser2", anobj);

          parameterMap的使用

           <parameterMap class="User" id="insertUser-param">

            <parameter property="username"/>

            <parameter property="password"/>

           </parameterMap>

           <insert id="insertUser" parameterMap="insertUser-param">

            insert into t_user values (

                 null,?,?

            )

            <selectKey resultClass="int" keyProperty="id">

                 SELECT @@IDENTITY AS ID

            </selectKey> 

           </insert>

          parameterMap用于傳入參數,以便匹配SQL語句中的?

                 User user = new User();

                 user.setUsername("張三dd");

                 user.setPassword("張三密碼dd");

                

                 Object obj = sqlMapper.insert("insertUser", user);

          利用parameterMap,可以定義參數對象的屬性如何映射到SQL查詢語句的動態參數上,注意parameterMap<parameter/>標簽的先后順序不能顛倒!

          如何將查詢結果映射到不同的對象?(resultClass的使用)

          package com.ibatis.model;

          publicclassOtherObject {

              privateintid;

              private String prop1;

              private String prop2;

             

              publicint getId() {

                 returnid;

              }

              publicvoid setId(int id) {

                 this.id = id;

              }

              public String getProp1() {

                 return Prop1;

              }

              publicvoid set Prop1 (String Prop1) {

                 this. Prop1 = Prop1;

              }

              public String getProp2() {

                 returnusername;

              }

              publicvoid setProp2 (String Prop2) {

                 this.Prop2 = Prop2;

              }

          }

           <select id="selectUserForOtherObject" resultClass="com. ibatis.OtherObject" parameterClass="int">

            select

            username as prop1,

            password as prop2

            from t_user where id=#value#

           </select>

                 //查找t_user表,將其結果映射到一個屬性名不同的對象中!

                 OtherObject obj = (OtherObject)sqlMapper.queryForObject("selectUserForOtherObject", 1);

                 System.out.println(obj.getProp1()+","+obj.getProp2());

          如何將查詢結果集映射到不同的對象?(resultMap的基本使用)

           <resultMap class="com.ibatis.model.OtherObject" id="ooResult">

            <result property="prop1" column="username"/>

            <result property="prop2" column="password"/>

           </resultMap>

           <!--

           如果使用resultMap來定義如何映射,則如下語句不可寫成:

           select username as prop1,password as prop2 ....

           -->

           <select id="selectUserForOtherObject2" parameterClass="int" resultMap="ooResult">

                select

                username,

                password

                from t_user where id=#value#

           </select>

                 //查找t_user表,將其結果映射到一個屬性名不同的對象中!

                 OtherObject obj = (OtherObject)sqlMapper.queryForObject("selectUserForOtherObject2", 17);

                 System.out.println(obj.getProp1()+","+obj.getProp2());

          如何將查詢結果集映射為xml格式的數據?

           <select id="selectXmlData" resultClass="xml" xmlResultName="User" parameterClass="int">

            select * from t_user where id=#value#

           </select>

           <select id="selectXmlDatas" resultClass="xml" xmlResultName="User">

            select * from t_user

           </select>

                 //查找t_user表,將其結果映射到xml

                 //返回值是xml形式的字符串

                 Object obj = (Object)sqlMapper.queryForObject("selectXmlData", 1);

                 System.out.println(obj);

                 //查找t_user表,將其結果映射到xml

                 List list  = (List)sqlMapper.queryForList("selectXmlDatas");

                 System.out.println(list);

          如何用Map類型的對象作為傳入參數?

           <!--

           這里,可以使用全路徑類名,如:

           java.util.Map

           java.util.HashMap

           java.util.TreeMap

           

           map

           -->

           <insert id="insertUser" parameterClass="map">

            insert into t_user values (

                 null,#username#,#password#

            )

           </insert>

                 Map user = new TreeMap();

                 user.put("username", "Map用戶");

                 user.put("password", "Map用戶密碼");

                 sqlMapper.insert("insertUser",user);

          如何將查詢結果集的元素轉換為Map類型的對象?

           <!--

           resultClass可以定義為java.util.HashMap類型,

           將能自動轉換

           -->

           <select id="selectMapUsers" resultClass="java.util.HashMap">

            select * from t_user

           </select>

                 List list = (List)sqlMapper.queryForList("selectMapUsers");

                 System.out.println(list);

                 for (Iterator iter = list.iterator(); iter.hasNext();) {

                     Map map = (Map) iter.next();

                     //可在此輸出map的數據

                 }

          事務處理

          可以使用sqlMapClientstartTransaction/commitTransaction/endTransaction等方法來控制事務的邊界。

          如果與spring整合(這是iBatis推薦的方式),則我們需要在spring配置文件中指定其事務特性。


          評論

          # re: ibatis學習(二)--ibatis使用介紹  回復  更多評論   

          2008-11-18 10:07 by redcoatjk
          寫的很好~

          # re: ibatis學習(二)--ibatis使用介紹  回復  更多評論   

          2012-03-01 10:31 by 張弓長
          我照著你的一步一步做了,現在對CRUD基本上了解了,謝謝你啊

          只有注冊用戶登錄后才能發表評論。


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 嘉鱼县| 钟山县| 南投县| 唐山市| 新乐市| 镇宁| 灵山县| 桦川县| 深水埗区| 平顶山市| 息烽县| 建德市| 奉节县| 台东县| 拉孜县| 二手房| 长沙市| 广东省| 綦江县| 武宣县| 崇州市| 青岛市| 新绛县| 临城县| 屯门区| 绥阳县| 上饶市| 巴里| 房产| 井研县| 普陀区| 会泽县| 松阳县| 寿阳县| 苍梧县| 阿巴嘎旗| 祁东县| 清河县| 讷河市| 绥宁县| 紫阳县|