首先在数据库创建存储过程:

create proc [dbo].[usp_GetPersonById]
@Id int
as
begin
select Id,Name from Person where Id=@Id
end

XML映射文件中定义参数集合:

  <parameterMaps>
<!--注意:parameterMap中的参数个数和顺序要和存储过程中的一致-->
<parameterMap id="GetPersonByIdProc">
<parameter property="Id" column="Id"/>
</parameterMap>
</parameterMaps>

然后定义操作:

    <!--执行存储过程-->
<procedure id="usp_GetPersonById" parameterMap="GetPersonByIdProc" resultClass="PersonViewModel">
usp_GetPersonById
</procedure>

DAO层:

public PersonViewModel GetPersonByIdProc(Hashtable ht)
{
PersonViewModel p = mapper.QueryForObject<PersonViewModel>("usp_GetPersonById", ht);
return p;
}

Main调用:

 static void Main(string[] args)
{
PersonDAO dao = new PersonDAO();
Hashtable ht = new Hashtable();
ht.Add("Id", );
PersonViewModel p = dao.GetPersonByIdProc(ht);
if (p != null)
Console.WriteLine(p.Id + p.Name); Console.ReadKey();
}

注意:Hashtable中的键值名称和参数集合中的property相对应,并且区分大小写。

执行带output输出参数的存储过程

修改下存储过程:

ALTER proc [dbo].[usp_GetPersonById]
@Id int,
@totalCount int output
as
begin
select Id,Name from Person where Id=@Id
set @totalCount=(select count(*) from Person)
end

XML映射文件中定义参数集合:

 <parameterMaps>
<!--注意:parameterMap中的参数个数和顺序要和存储过程中的一致-->
<parameterMap id="GetPersonByIdProc">
<parameter property="Id" column="Id"/>
<parameter property="totalCount" column="totalCount" direction="Output"/>
</parameterMap>
</parameterMaps>

定义操作和DAO层不变:

 <!--执行存储过程-->
<procedure id="usp_GetPersonById" parameterMap="GetPersonByIdProc" resultClass="PersonViewModel">
usp_GetPersonById
</procedure>

Main调用:

 static void Main(string[] args)
{
int totalCount = ;
PersonDAO dao = new PersonDAO();
Hashtable ht = new Hashtable();
ht.Add("Id", );
ht.Add("totalCount", totalCount);
PersonViewModel p = dao.GetPersonByIdProc(ht);
if (p != null)
Console.WriteLine(p.Id + p.Name+" 共"+ ht["totalCount"] + "条数据"); Console.ReadKey();
}

参考:http://www.cnblogs.com/caoyc/category/873268.html

Ibatis.Net 执行存储过程学习(八)的更多相关文章

  1. MyCat 学习笔记 第十三篇.数据分片 之 通过HINT执行存储过程

    1 环境说明 VM 模拟3台MYSQL 5.6 服务器 VM1 192.168.31.187:3307 VM2 192.168.31.212:3307 VM3 192.168.31.150:  330 ...

  2. Java中执行存储过程和函数(web基础学习笔记十四)

    一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. CallableStatement 接口继承自PreparedStatement 接口.所以CallableS ...

  3. Mysql学习---使用Python执行存储过程

    使用Python执行存储过程 使用Python执行存储过程[2部分]: 1.执行存储过程,获取存储过程的结果集  2.将返回值设置给了  @_存储过程名_序号 = #!/usr/bin/env pyt ...

  4. sqlserver学习2---java执行存储过程

    一.存储过程 1.新增操作存储过程 --------------1.新建 增加学生的存储过程---------------------------- set IDENTITY_INSERT stude ...

  5. C#学习-执行存储过程

    使用存储的优点 1.执行更快.直接写sql脚本会有个解析编译的过程. 2.修改方便.当业务改变时,只需要改存储过程,不需要修改C#代码 3.传递Sql脚本数据相对更小 缺点: 1.使用存储过程,数据库 ...

  6. Python Tutorial 学习(八)--Errors and Exceptions

    Python Tutorial 学习(八)--Errors and Exceptions恢复 Errors and Exceptions 错误与异常 此前,我们还没有开始着眼于错误信息.不过如果你是一 ...

  7. mySql-数据库之存储过程学习总结

    之前在工作中总是听别人提到存储过程,觉得是个很高深的东西,利用工作之余,看了下相关的知识,现将学习知识总结如下,希望可以为刚学习的人提供些许帮助. 开发环境:Navicat For Mysql. My ...

  8. SQL server 存储过程学习

    一.定义变量--简单赋值 declare @a intset @a=5 print @a --使用select语句赋值 declare @user1 nvarchar(50) select @user ...

  9. Ibatis.Net 各种配置说明学习(二)

    1.各个配置文件的配置说明 providers.config:指定数据库提供者,.Net版本等信息. xxxxx.xml:映射规则. SqlMap.config:大部分配置一般都在这里,如数据库连接等 ...

随机推荐

  1. Mysql存储引擎federated

    Mysql数据库存储引擎federated(联盟) 意思就是把两个不同区域的数据库联系起来,以致可以访问在远程数据库的表中的数据,而不是本地的表.->专门针对远程数据库的实现->一般情况下 ...

  2. Oracle DROPtable以及Truncate table 的简单测试

    1. 一个用户库 有一个业务表比较大 大小是 49g 表的行数为:121546147 一亿两千万行 制作一个虚拟机的快照测试一下 drop table 和 truncate table的性能差距 2. ...

  3. [转帖]DRAM芯片战争,跨越40年的生死搏杀

    DRAM芯片战争,跨越40年的生死搏杀 超级工程一览 ·2017-08-20 12:50·半导体行业观察 阅读:1.4万 来源:内容来自超级工程一览 , 谢谢. DRAM是动态随机存储器的意思,也就是 ...

  4. QT试验(1)

    今天,用Qt Creator写第一个简单的小程序“HelloQt”,运行时报错:error: cannot open C:\Users\敏\AppData\Local\Temp\main.obj.51 ...

  5. 解决Delphi 2010启动时出现cannot create xxxx\EditorLineEnds.ttr问题

    由于在Windows安装了最近的更新(KB2982791, KB2970228)后,Delphi的IDE需要创建的一个文件%TEMP%\EditorLineEnds.ttr会被系统锁定,导致除非重新启 ...

  6. libev学习之ev_run

    好吧,神马都init好了,loop毕竟是个环呐,在哪跑起来呢,ok,他是ev_run的工作: int ev_run (EV_P_ int flags) { #if EV_FEATURE_API ++l ...

  7. [代码]--WinForm 窗体之间相互嵌套

    public FrmScan() { InitializeComponent(); Form1 frm = new Form1(); frm.Dock = DockStyle.Fill; frm.Fo ...

  8. BZOJ5461 PKUWC2018Minimax(概率期望+线段树合并+动态规划)

    离散化后,容易想到设f[i][j]为i节点权值为j的概率,不妨设j权值在左子树,则有f[i][j]=f[lson][j](pi·f[rson][1~j]+(1-pi)·f[rson][j~m]). 考 ...

  9. BZOJ1050 HAOI2006旅行(最小生成树+LCT)

    暴力枚举路径中权值最小边是哪个,然后求出边权不小于它的边的最小生成树,即可保证该路径上最大值最小.暴力当然可以过,这里使用LCT维护.注意数据中有自环. #include<iostream> ...

  10. 【BZOJ2178】圆的面积并(辛普森积分)

    [BZOJ2178]圆的面积并(辛普森积分) 题面 BZOJ 权限题 题解 把\(f(x)\)设为\(x\)和所有圆交的线段的并的和. 然后直接上自适应辛普森积分. 我精度死活一个点过不去,不要在意我 ...