在上一篇里面我们知道了什么是IbatisNet,并且知道了如何用IbatisNet进行简单的增删改查的操作,在这一篇文章里面我们主要介绍一下IbatisNet操作存储过程。
我们一般把存储过程分为两种类型:
1,查询类型的存储过程
也就是所谓的select语句
2,修改类型的存储过程
例如,insert,update,delete修改数据库数据的操作。
下面首先我们介绍一下查询类型的存储过程,为了使用我们建一个存储过程(以前很少用过现场百度的…………如果写的不好或者不对欢迎指正)
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 create procedure pt_SelectByTj 2 @classes_name varchar(100), 3 @classes_description varchar(100) 4 as 5 if(@classes_name is not null and @classes_description is not null) 6 begin 7 select * from dbo.calsses where classes_name like '%'+@classes_name+'%' and classes_description like '%'+@classes_description+'%'; 8 end 9 if(@classes_name is not null and @classes_description is null) 10 begin 11 select * from dbo.calsses where classes_name like '%'+@classes_name+'%'; 12 end 13 if(@classes_name is null and @classes_description is not null) 14 begin 15 select * from dbo.calsses where classes_description like '%'+@classes_description+'%'; 16 end 17 if(@classes_name is null and @classes_description is null) 18 begin 19 select * from dbo.calsses; 20 end
然后我们要到xml里面去配置,在statements节点下面加一个procedure表示执行的是存储过程。其中parameterMap="swapParas"(swapParas的来历看下面的配置)
是参数类型 resultMap="SelectAllResult"(SelectAllResult的来历看下面的配置)是返回结果
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <statements> 2 <procedure id="GetClassesListByTj" parameterMap="swapParas" resultMap="SelectAllResult"> 3 pt_SelectByTj 4 </procedure> 5 </statements>
我们来看一下如何配置存储过程的参数条件(需要注意的是:这里面的顺序一定要和你在存储过程里面的顺序一样)
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <parameterMaps> 2 <parameterMap id="swapParas" class="Model.Calsses"> 3 <parameter property="Name" column="classes_name" /> 4 <parameter property="Description" column="classes_description" /> 5 </parameterMap> 6 </parameterMaps>
简单介绍这些属性的含义
parameterMap节点表示参数的集合,可以是一个实体,也可以是Hashtable,HashMap等数据结构。
parameter节点就是你的参数节点,property是你Hashtable里面的key值,column是你存储过程里面变量的名字,如果key值跟存储过程里面变量的名字相同的话column
可以为空。
下面介绍一下 resultMap="SelectAllResult"中SelectAllResult的来历
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 <resultMaps> 2 <resultMap id="SelectAllResult" class="classes"> 3 <result property="Id" column="calsses_id" /> 4 <result property="Name" column="classes_name" /> 5 <result property="Description" column="classes_description" /> 6 </resultMap> 7 </resultMaps>
在这里每一张表都对应一个实体,但是有时候我们的实体里面的属性跟我们的数据库字段对应不上,所以我们就在这里配置一下方便后面的使用。
看一下我们service类面的方法还是和以前一样调用
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 /// <summary> 2 /// 根据条件查询全部额班级信息 3 /// </summary> 4 /// <param name="ht">参数</param> 5 /// <returns>查询的结果</returns> 6 public IList<Calsses> GetClassesListByTj(Hashtable ht) 7 { 8 return SqlMap.QueryForList<Calsses>("GetClassesListByTj", ht); 9 }
下面是aspx.cs里面的方法
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 protected void btn_select_Click(object sender, EventArgs e) 2 { 3 Hashtable table = new Hashtable(); 4 table.Add("Name", txt_name.Text); 5 table.Add("Description", txt_name.Text); 6 gdv_list.DataSource = service.GetClassesListByTj(table); 7 gdv_list.DataBind(); 8 }
界面如下:
好了,对于存储过程就先到这儿,这里面只写了一个查询的小例子,关于增删改的例子,就请读者自己去实现了,边学边练习才能学的更深入。
由于我也是初学者,如果文章中有什么不对或者遗漏的地方,欢迎大家指正………………
关于Ibatisnet的简单操作可以参照我的上一篇博客 跟初学者学习IbatisNet第一篇
本来还想在这一篇里面介绍一下Log4net呢,后来一想,还是留在下一篇来单独介绍一下如何用log4net记录日志吧。