IBatis.Net使用总结(四)-- IBatis 调用存储过程

 IBatis 调用存储过程

http://www.cnblogs.com/jeffwongishandsome/archive/2010/01/10/1543219.html

http://www.cnblogs.com/firstyi/archive/2008/01/25/1053208.html

存储过程大致分为两种:

  • 查询类存储过程——select查询类的存储过程,不曾改变数据库数据的存储过程
  • 更新类存储过程——Update/Insert/Delete类型的存储过程,改变数据库数据的存储过程

IBatis.net调用存储过程:

1、查询类型的存储过程

创建一个查询类存储过程,其中包含output参数。

CREATE PROCEDURE up_GetCountByTitle
    @title VARCHAR(100)    ,
    @total INT OUT
    AS
    BEGIN
        WITH a AS (
        SELECT * FROM Article a WHERE a.ArticleTitle LIKE '%'+@title+'%')        
        SELECT @total=COUNT(*) FROM a
    END
获取总数的存储过程

XML文件,如果包含输出参数,输出参数属性值,必须包含column属性。

<?xml version="1.0" encoding="utf-8" ?>
<sqlMap namespace="Article"
    xmlns="http://ibatis.apache.org/mapping"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <alias>
    <typeAlias alias="Article" type="YY.MicroNet.Model.Article,YY.MicroNet.Model"/>
  </alias>

  <resultMaps>
    <resultMap id="FullResultMap" class="Article">
      <result property="PKArticle" column="PK_Article" dbType="VarChar"/>
      <result property="ArticleTitle" column="ArticleTitle" dbType="NVarChar"/>
      <result property="ArticleAuthor" column="ArticleAuthor" dbType="NVarChar"/>
      <result property="ArticleContent" column="ArticleContent" dbType="NVarChar"/>
      <result property="EditTime" column="EditTime" dbType="DateTime"/>
      <result property="Dr" column="Dr" dbType="Bit"/>
      <result property="Ts" column="Ts" dbType="DateTime"/>
    </resultMap>
    <parameterMaps>
      <!--parameterMap中的参数个数和顺序要和up_GetCountByTitle存储过程中的一致-->
      <parameterMap id="params" class="Hashtable">
        <parameter property="title" />
        <parameter property="total" column="total" direction="Output"/>
      </parameterMap>
    </parameterMaps>
  </resultMaps>

  <statements>
    <!--调用查询类型的存储过程-->
    <procedure id="Article_GetCountByTitle" parameterMap="" resultClass="System.Int32">
      up_GetCountByTitle
    </procedure>
  </statements>
</sqlMap>
ArticleMap.xml

在cs中调用

        public IList<Article> GetCountByTitle(Hashtable ht)
        {
            String stmtId = "Article_GetCountByTitle";
            IList<Article> result = SqlMap.QueryForList<Article>(stmtId,  ht);
            return result;
        }

  

posted @ 2016-04-05 14:52  weiqinl  阅读(458)  评论(0编辑  收藏  举报