ibatis.net学习笔记(三) SqlMap.xml

<?xml version="1.0" encoding="utf-8" ?>
<sqlMap namespace="IDCreaterMap" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <alias>
    <typeAlias alias="IDCreater"  type="EWineShop.Entity.EIDCreater" />
  </alias>
  <resultMaps>
    <resultMap id="FullResultMap" class="IDCreater">
        <result property="IDName" column="IDName" type="System.String" dbType="SqlDbType.VarChar"/> 
        <result property="CurrentCount" column="CurrentCount" type="System.Int32" dbType="SqlDbType.Int"/>
        <result property="Description" column="Description" type="System.String" dbType="SqlDbType.NVarChar"/>
        <result property="CreateTime" column="CreateTime" type="System.DateTime" dbType="SqlDbType.DateTime"/>
    </resultMap>
  </resultMaps>

  <parameterMaps>
    <parameterMap id="CreateNumberID" parameterClass="Hashtable">
      <parameter property="IDName"  column="IDName"  type="string" dbType="NVarChar" direction="Input"/>
      <parameter property="Description"  column="Description" type="string" dbType="NVarChar" direction="Input"/>
      <parameter property="Seed"  column="Seed" type="int" dbType="Int" direction="Input"/>
      <parameter property="ReturnID" column="ReturnID"   type="int" dbType="Int" direction="Output" />
    </parameterMap>
  </parameterMaps>
  
  <statements>
    <select id="SelectAll" resultMap="FullResultMap">
      SELECT * FROM IDCreater
    </select>
    
    <select id="SelectByIDName" parameterClass="String" resultMap="FullResultMap" extends="SelectAll">
      WHERE
      (IDCreater.IDName = #IDName#)
    </select>

    <update id="UpdateByIDName" parameterClass="IDCreater">
      UPDATE IDCreater SET   IDName=#IDName# ,    CurrentCount=#CurrentCount# ,    Description=#Description# ,    CreateTime=#CreateTime#         WHERE IDName = #IDName#
    </update>

    <delete id="DeleteByIDName" parameterClass="string">
      DELETE FROM IDCreater  WHERE IDName = #IDName#
    </delete>
    
    <insert id="InsertIDCreater" parameterClass="IDCreater">
      INSERT INTO IDCreater(IDName, CurrentCount, Description, CreateTime )
      VALUES(#IDName# , #CurrentCount# , #Description# , #CreateTime#  )
  </insert>

    <procedure id="GetNewID" resultClass="int" parameterMap="CreateNumberID">
      CreateID
    </procedure>
    
    
  </statements>
</sqlMap>

"sqlMap namespace=" 配置文件的namespace

每个ResultMap都有一个自己的ID,如果你在sqlmap.config中没有配置使用命名空间的话,那么这个ResulteMap ID是全局(这点在所有的iBATIS配置元素都是一样的),ResultMap一个重要的属性的是class,它将决定这个ResultMap对应的实 例的类,换句话讲,它的作用是指出结果集要映射的数据类型。在extends属性中可以设置它将要继承的ResultMap,如果给他指定的了值,那么它 将会从super Resultmap继承所的映射配置字段。定义如下:

<resultMaps>
    <resultMap id="FullResultMap" class="IDCreater">
    </resultMap>
  </resultMaps>

如果你有正确配置了iBATIS的XSD架构文件的话,那么这时候就会提示resultMap的定义是不完全的。没错,接下来就是要定义Result元 素。每一个result元素都是定义一个字段与数据类属性对应的映射。在每一个result元素有比较多的属性参数,其中property和column 是必须的,其它的参数属性都是可选的。所以我们在每一个resultMap中必须定义超过一个以上的result定义。通常以下的配置就可以完成基本的配 置了。

<resultMaps>
    <resultMap id="FullResultMap" class="IDCreater">
        <result property="IDName" column="IDName" type="System.String" dbType="SqlDbType.VarChar"/> 
        <result property="CurrentCount" column="CurrentCount" type="System.Int32" dbType="SqlDbType.Int"/>
        <result property="Description" column="Description" type="System.String" dbType="SqlDbType.NVarChar"/>
        <result property="CreateTime" column="CreateTime" type="System.DateTime" dbType="SqlDbType.DateTime"/>
    </resultMap>
  </resultMaps>
property对应 IDCreater实体类的属性 column="IDName" 对应数据库的 "IDName"字段 type="" 声明.net字段类型 dbtype声明DB类型
<statements></statements>节点就是sql语法了 下篇详细介绍
 <parameterMaps> 就是声明存储过程
 <select id="SelectAll" resultMap="FullResultMap">
      SELECT * FROM IDCreater
    </select>

这个SQL 返回结果是 FullResultMap  就是我们直接配置的对应关系

c# 调用语法

string stmtId = "IDCreaterMap.SelectAll"; 
return base.SqlMapper.QueryForList<EIDCreater>(stmtId, iDName);

这样就返回一个List;

 <select id="SelectByIDName" parameterClass="String" resultMap="FullResultMap" extends="SelectAll">
      WHERE
      (IDCreater.IDName = #IDName#)
    </select>

注意这个配置 他是扩展于 SelectAll 这个ID的  那么我们可以直接接着写条件了 where xx=xxxx

调用语法同上

--------------------------------------------------------------------------------------------------------------------------------------

update

  <update id="UpdateByIDName" parameterClass="IDCreater">
      UPDATE IDCreater SET   IDName=#IDName# ,    CurrentCount=#CurrentCount# ,    Description=#Description# ,    CreateTime=#CreateTime#         WHERE IDName = #IDName#
    </update>

调用语法

string stmtId = "IDCreaterMap.UpdateByIDName";
base.SqlMapper.Update(stmtId, entity);

看到这里可能大家要问 如果我只更新两个字段 难道非要把整个entity传进去吗?

我们可以这样写这个map 穿一个Hashtable

  <update id="UpdateByIDName" parameterClass="Hashtable">
      UPDATE IDCreater SET   IDName=#IDName# ,    CurrentCount=#CurrentCount#   WHERE IDName = #IDName#
    </update>

调用语法 注意Hashtable字段要对上

Hashtable ht = new Hashtable();

 ht.Add("IDName", idName);

 ht.Add("CurrentCount", currentCount);

string stmtId = "IDCreaterMap.UpdateByIDName";
base.SqlMapper.Update(stmtId, ht);

-----------------------------------------------------------------------------------------------------

Delete

 <delete id="DeleteByIDName" parameterClass="string">
      DELETE FROM IDCreater  WHERE IDName = #IDName#
    </delete>

调用语法

string stmtId = "IDCreaterMap.DeleteByIDName";
base.SqlMapper.Update(stmtId, iDName);

------------------------------------------------------------------------------------------------------------

insert 

<insert id="InsertIDCreater" parameterClass="IDCreater">
      INSERT INTO IDCreater(IDName, CurrentCount, Description, CreateTime )
      VALUES(#IDName# , #CurrentCount# , #Description# , #CreateTime#  )
  </insert>

如果我们插入的时候同时要的到自增的ID怎么写呢?

这样 写个例子 在下面加一列属性 selectkey

 
<insert id="InsertIDCreater" parameterClass="IDCreater">
      INSERT INTO IDCreater(IDName, CurrentCount, Description, CreateTime )
      VALUES(#IDName# , #CurrentCount# , #Description# , #CreateTime#  )
     <selectKey resultClass="System.Int32" Property="IDName" type="post">
      SELECT @@IDENTITY AS value
    </selectKey>
  </insert>

若需要返回自增列的调用方法

string stmtId = "NewsMap.InsertIDCreater";
Object obj = base.SqlMapper.Insert(stmtId, entity);
return (System.Int32)obj;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值