`

Ibatis调用存储过程(笔记)

 
阅读更多
众所周知,Ibatis的核心就在于映射文件(Data Map XML File),在调用存储过程返回取得返回参数的过程中,最有可能出错的地方,就是映身文件的配置

我的开发环境地是(VS2008(.Net2.0)+Win2003Server+Oracle 10g)

直接进入主题,先来看一个资料

调用存储过程只能用到<procedure>(当然,我在博客园也见到一些朋友介绍说可以使用<statement>标签,但经过小弟在测试调用Oracle数据库一直报错String类型没有长度限制,后来改成<procedure>就正常了)


<statements>
<procedure id="testProcedure" parametersMap="paramMap">
    Test.TestProcedure
</procedure>
</statements>

<parameterMaps>
    <parameterMap id="paramMap" class="Hashtable">
      <parameter property="ID" column="PS_ID" />
      <parameter property="UserName" column="PS_USERNAME" />
      <parameter property="PassWord" column="PS_PASSWORD" />
      <parameter property="returnValue" column="PS_RETURNVALUE" direction="Output" />
    </parameterMap>
</parameterMaps>



class一定设置class="Hashtable",当然也可以根据你的实际情况填写;在本文中是以Hashtable为例

Column属性一定要全部大写,否则会报错,找不到该参数(Oracle)


Hashtable map = new Hashtable();
map.Add("ID", 1);
map.Add("UserName", "user");
map.Add("PassWord", "pwd");
map.Add("returnValue", -1);

mapper.Insert("testProcedure", map);

Console.WriteLine(map["returnValue"].ToString());



Ibatis使用简单,就是配置要注意,注意大小写敏感,一般是不会出错的~



1、更新类型的存储过程
sp_InsertAccount:


CREATE PROCEDURE [dbo].[sp_InsertAccount]
    -- Add the parameters for the stored procedure here
   @Account_ID int,
   @Account_FirstName varchar(32),
   @Account_LastName varchar(32)AS
BEGIN
insert into accounts (account_id, account_firstname, account_lastname)
    values (@Account_ID,@Account_FirstName,@Account_LastName )
END
Map配置文件:


        <procedure id="InsertAccountViaStoreProcedure" parameterMap="insert-params_new">
            sp_InsertAccount
        </procedure>

    <parameterMap id="insert-params_new" class="Account">
      <parameter property="Id" />
      <parameter property="FirstName" />
      <parameter property="LastName" />
    </parameterMap>

这里要注意的就是ParameterMap中的参数个数和顺序要和sp_InsertAccount存储过程中的一致

Ado中的调用代码:

        public void InsertAccountViaStoreProcedure(Account account)
        {
            try
            {
                sqlMap.Insert("InsertAccountViaStoreProcedure", account);
            }
            catch (DataAccessException ex)
            {
                throw new DataAccessException("Error executing InsertAccountViaStoreProcedure. Cause :" + ex.Message, ex);
            }
        }
这里使用的是sqlMap.Insert的方法,为了看起来直观一点,其实使用sqlMap.QueryForObject方法的话效果也是一样的:)

2、查询类型的存储过程
GetAccountByName:

CREATE PROCEDURE [dbo].[GetAccountByName]
    @name varchar(32)
AS
BEGIN
select * from accounts where Account_FirstName like '%' + @name + '%'
END

Map配置文件:


    <procedure id="GetAccountByNameViaStoreProcedure" resultMap="account-result" parameterMap="selectpro-params">
      GetAccountByName
    </procedure>

    <parameterMap id="selectpro-params" class="string">
      <parameter property="name"/>
    </parameterMap>
这里parameterMap也是和上面的要求一样,至于property的名字在这里没有实际作用,可以任意取名的

Ado中的调用代码:


        public ArrayList GetAccountByNameViaStoreProcedure(string strName)
        {
            try
            {
                ArrayList list = (ArrayList)sqlMap.QueryForList("GetAccountByNameViaStoreProcedure", strName);
                return list;
            }
            catch (DataAccessException ex)
            {
                throw new DataAccessException("Error executing SqlAccountViaSqlMapDao.GetAccountById. Cause :" + ex.Message, ex);
            }
        }

http://www.cnblogs.com/shineqiujuan/archive/2009/08/09/1542423.html 复制于此..
分享到:
评论

相关推荐

    ibatis笔记

    2. **存储过程优先**:在安全性或性能优化的考虑下,如果所有的数据库操作必须通过存储过程完成,iBATIS 支持调用存储过程。 3. **高性能需求**:在大数据量和高并发的环境中,由于iBATIS可以直接控制SQL,因此在...

    ibatis 学习笔记

    **Data Access Objects (DAO)** 是一个通用API层,封装了实体操作的细节,提供简单接口来操作数据,使得应用程序可以灵活地切换不同的数据存储机制。DAO使得系统各部分调用数据时保持一致性,无论底层数据库如何变化...

    Ibatis的学习笔记

    对于存储过程的处理,Ibatis允许直接调用数据库的存储过程,并通过out参数获取返回结果。在XML映射文件中,可以使用select、insert、update或delete标签,通过parameterType指定输入参数类型,通过resultType或...

    ibatis在web工程中的应用笔记

    标题 "ibatis在web工程中的应用笔记" 涉及的主要知识点是MyBatis(原名iBatis)在Web应用程序开发中的使用。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。下面将详细阐述MyBatis的基本...

    Ibatis应用笔记

    例如,`select`用于查询,`insert`用于插入数据,`update`用于更新数据,`delete`用于删除数据,`procedure`则用于调用存储过程。 2. **Parameter Maps**:参数映射配置是为语句提供参数的方式。每个Parameter Maps...

    IBATIS学习笔记

    它的主要特点是将对象映射为SQL语句,这使得开发人员可以更加灵活地控制SQL的执行,并且能够直接利用现有的SQL语句和存储过程。因此,iBatis被归类为轻量级的框架,非常适合对性能有较高要求的应用场景。 与...

    iBATIS学习笔记

    - **调用存储过程**:用于调用数据库的存储过程。 - **执行DDL语句**:用于执行数据库定义语言(DDL)语句。 - **&lt;sql&gt;SQL语句片段**:定义可复用的SQL片段。 - **组合语句**:将多个SQL片段组合成完整的SQL语句。 ...

    ibatis学习笔记

    通过XML配置文件或注解,我们可以定义SQL查询、存储过程以及复杂的映射规则,使业务逻辑和数据访问逻辑之间保持清晰的界限。 iBatis的工作流程主要包括以下几个步骤: 1. 加载配置:iBatis启动时会读取配置文件,...

    SSI-iBatis2.x

    本文是个人在学习过程中的学习笔记,详细讲解了如何使用iBatis2.x以及如何将其与Struts2.x,Spring3.x进行整合开发,其中包括iBatis基础使用,存储过程调用和数据库函数的调用。

    【狂神说】mybatis学习总结笔记(全)PDF格式文档 MyBatis.pdf

    MyBatis是一个优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML或注解来配置和映射原始类型、接口和Java POJO...

    JAVA私塾全套笔记

    JAVA私塾全套笔记深入解析了Java编程语言的各个方面,涵盖了从基础语法到高级特性,以及在企业级开发中的应用。以下是对该笔记中关键知识点的详细解读: ### JAVA基础 #### 第一章 Java入门 - **Java是什么?** ...

    struts跟数据库的笔记,心得.rar

    Struts应用中的DAO层可以通过CallableStatement调用Oracle的存储过程。 三、Struts与MySQL数据库的交互 1. MySQL驱动配置:与Oracle类似,添加MySQL的JDBC驱动,并在数据源配置中指定。 2. MySQL特性:MySQL支持...

    传智播客_Springmvc+Mybatis由浅入深笔记与资料

    **MyBatis**(前身是iBatis)是一个支持普通SQL查询、存储过程以及高级映射的优秀持久层框架。它消除了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程,通过XML或注解的方式将接口实现类映射到数据库语句上...

    Mybatis学习笔记大全.docx

    MyBatis是一个基于Java的持久层框架,原先是Apache的iBatis项目,后于2010年迁移到Google Code并更名为MyBatis,再后来在2013年11月转到GitHub上发展。这个框架的主要目标是简化数据库访问,特别关注SQL语句的编写,...

    MyBatis笔记1

    MyBatis 强调的是对 SQL 的自定义控制,允许开发者编写复杂的 SQL 查询和存储过程,同时提供了自动输入映射和结果集映射功能,减少了手动操作 JDBC 的繁琐工作。MyBatis 提供了半自动的 ORM 实现,相比于 Hibernate ...

Global site tag (gtag.js) - Google Analytics