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

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

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

    瘋狂

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

    SqlMapClient對(duì)象

    這個(gè)對(duì)象是iBatis操作數(shù)據(jù)庫(kù)的接口(執(zhí)行CRUD等操作),它也可以執(zhí)行事務(wù)管理等操作。這個(gè)類是我們使用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;

        //在靜態(tài)區(qū)塊中初試化返回

        static {

            try {

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

                String resource = "sql_map_config.xml";

                //利用工具類Resources來(lái)讀取到配置文件

                Reader reader = Resources.getResourceAsReader(resource);

                //創(chuàng)建SqlMapClient接口的變量實(shí)例

                sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);

            } catch (Exception e) {

                e.printStackTrace();

                throw new RuntimeException(

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

            }

        }

        public static SqlMapClient getSqlMapInstance() {

            //提供靜態(tài)方法返回靜態(tài)區(qū)塊中得到的SqlMapClient

            return sqlMap;

        }

    }

    主要用法:

    如何獲得剛插入記錄的自增長(zhǎng)ID值?

    以下所有虛線上面代表User.xml中的內(nèi)容,虛線下方是測(cè)試類中的內(nèi)容: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("張三密碼");

          

           //如果主鍵是自動(dòng)生成的,則其返回值可以通過(guò)<selectKey>標(biāo)簽來(lái)設(shè)置

           //如果不通過(guò)<selectKey>標(biāo)簽來(lái)設(shè)置,則返回值為空!

           //<selectKey >中的keyProperty,是指定User中的id屬性,當(dāng)調(diào)用結(jié)束之后,

           //user對(duì)象的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類型的對(duì)象

           User user = new User();

           user.setUsername("張三");

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

          

           //傳遞進(jìn)去的對(duì)象,必須是User類型

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

    insertUser2沒(méi)有使用parameterClass,所以可以傳入任意具有相應(yīng)屬性值的對(duì)象

           JustAnObject anobj = new JustAnObject();

           anobj.setUsername("用戶名");

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

          

           //如果沒(méi)有指定parameterClass屬性,則任何一個(gè)具有相應(yīng)屬性值

           //的對(duì)象都可以被傳遞進(jìn)去

           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用于傳入?yún)?shù),以便匹配SQL語(yǔ)句中的?號(hào)

           User user = new User();

           user.setUsername("張三dd");

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

          

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

    利用parameterMap,可以定義參數(shù)對(duì)象的屬性如何映射到SQL查詢語(yǔ)句的動(dòng)態(tài)參數(shù)上,注意parameterMap<parameter/>標(biāo)簽的先后順序不能顛倒!

    如何將查詢結(jié)果映射到不同的對(duì)象?(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表,將其結(jié)果映射到一個(gè)屬性名不同的對(duì)象中!

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

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

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

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

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

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

     </resultMap>

     <!--

     如果使用resultMap來(lái)定義如何映射,則如下語(yǔ)句不可寫成:

     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表,將其結(jié)果映射到一個(gè)屬性名不同的對(duì)象中!

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

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

    如何將查詢結(jié)果集映射為xml格式的數(shù)據(jù)?

     <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表,將其結(jié)果映射到xml!

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

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

           System.out.println(obj);

           //查找t_user表,將其結(jié)果映射到xml

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

           System.out.println(list);

    如何用Map類型的對(duì)象作為傳入?yún)?shù)?

     <!--

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

     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);

    如何將查詢結(jié)果集的元素轉(zhuǎn)換為Map類型的對(duì)象?

     <!--

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

     將能自動(dòng)轉(zhuǎn)換

     -->

     <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的數(shù)據(jù)

           }

    事務(wù)處理

    可以使用sqlMapClientstartTransaction/commitTransaction/endTransaction等方法來(lái)控制事務(wù)的邊界。

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


    評(píng)論

    # re: ibatis學(xué)習(xí)(二)--ibatis使用介紹  回復(fù)  更多評(píng)論   

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

    # re: ibatis學(xué)習(xí)(二)--ibatis使用介紹  回復(fù)  更多評(píng)論   

    2012-03-01 10:31 by 張弓長(zhǎng)
    我照著你的一步一步做了,現(xiàn)在對(duì)CRUD基本上了解了,謝謝你啊

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲网站在线播放| ww在线观视频免费观看w| 亚洲综合成人网在线观看| 亚洲精品视频免费在线观看| 爽爽爽爽爽爽爽成人免费观看| 一级毛片在线免费看| 日本免费一区尤物| 黑人大战亚洲人精品一区| 亚洲福利电影在线观看| 色片在线免费观看| 免费在线观看的黄色网址| 亚洲视频手机在线| 久久av免费天堂小草播放| 女人与禽交视频免费看| 亚洲熟妇无码乱子AV电影| 亚洲a∨无码精品色午夜| 久久国产精品萌白酱免费| 国产一卡二卡≡卡四卡免费乱码 | 国产猛男猛女超爽免费视频| 四虎影视免费在线| 特级毛片aaaa级毛片免费| 性xxxxx免费视频播放| 国产av天堂亚洲国产av天堂| 亚洲欧美成人一区二区三区| 久久国产免费观看精品| 亚洲电影在线免费观看| 日韩人妻无码免费视频一区二区三区 | xxxxx做受大片视频免费| 亚洲av中文无码乱人伦在线咪咕| 亚洲成AV人片在WWW| 一二三四在线观看免费高清中文在线观看 | 亚洲精品视频免费 | 两个人日本WWW免费版| 曰皮全部过程视频免费国产30分钟 | 日韩精品极品视频在线观看免费 | 亚洲综合一区无码精品| 99re这里有免费视频精品| 亚洲夂夂婷婷色拍WW47| 中文字幕第13亚洲另类| 成人免费夜片在线观看| 日韩亚洲精品福利|