`

mybatis3.0调用oracle存储过程

 
阅读更多

昨天在项目经理那里得到了一个需求,所有业务逻辑都写在存储过程里面。

理由是:

1.以后出现业务上的变更,直接修改存储过程,而不用动项目。

2.在java中做业务逻辑判断需要与数据库交互多次,而用存储过程则可减少至一次,而且好的存储过程,执行效率高。

但是我个人觉得如果用存储功能,那就于数据库的依赖就太强了,提高了项目与数据库之间的耦合度,如果项目一旦换了数据库,那所有存储过程将重写。我层看过一个项目,所有的业务逻辑都用存储过程代替,包括登录校验返回的提示信息。

好像有点跑题了,言归正传:

mybatis3.0调用oracle存储过程,这里只说应该注意的,

<select id="isMember" statementType="CALLABLE" parameterType="com.sf.emp.web.services.InterfaceEntity">
	 {call emp_is_member.emp_isMember(#{mobileNumber,mode=IN,jdbcType=DECIMAL},#{mobileUserId,mode=OUT,jdbcType=DECIMAL},#{yys,mode=OUT,jdbcType=DECIMAL},#{areaId,mode=OUT,jdbcType=DECIMAL},#{memberGrade,mode=OUT,jdbcType=DECIMAL},#{isMember,mode=OUT,jdbcType=INTEGER})}
	</select>

 statementType里的CALLABLE是标注此sql为存储过程 parameterType是标注要传的参数,看了一些资料,有些同志在这里并没有写parameterType,但是也成功了,不过他们传的是map,这里咱先不管,严谨一点总是好的,还是加上。原来以为有传参,就应该有resultMap回参,但是当我在java中这样写时:

/**
	 * 判断是否是会员并返回会员等级
	 * @param iphone 电话号
	 */
	public InterfaceEntity isMember(String mobileUser){
		InterfaceEntity ie = new InterfaceEntity();
		ie.setMobileNumber(mobileUser);
		return  skToEmpDao.getSqlSession().selectOne("SkToEmpMapper.isMember",ie);
			}

 返回的是null,后来仔细一想,存储过程是只传值不返回的,返回的那个是函数,所以我们要接受的返回的东西,应该在我们传给他的参数里,也就是说调用存储过程后,所以可以写成:

/**
	 * 判断是否是会员并返回会员等级
	 * @param iphone 电话号
	 */
	public InterfaceEntity isMember(String mobileUser){
		InterfaceEntity ie = new InterfaceEntity();
		ie.setMobileNumber(mobileUser);
		skToEmpDao.getSqlSession().selectOne("SkToEmpMapper.isMember",ie);
		return ie;
	}

 语言组织的不太好,请谅解。转载请注明出处

 http://shen84121062.iteye.com/blog/1213857

分享到:
评论
4 楼 shen84121062 2014-10-29  
Qin_Tianxiang 写道
谢谢,博文没有具体看,只是看了最后解决的几句话,最终帮助我解决了问题。
oracle存储过程没有直接回传,直接写入了你入参的对象中;
mysql存储过程,则会回传;

有帮助就好
3 楼 Qin_Tianxiang 2014-09-30  
谢谢,博文没有具体看,只是看了最后解决的几句话,最终帮助我解决了问题。
oracle存储过程没有直接回传,直接写入了你入参的对象中;
mysql存储过程,则会回传;
2 楼 yesewenrou 2014-03-19  
1 楼 java苏打粉 2011-12-31  
试了,报错呢~~

相关推荐

    Ibatis调用Oracle存储过程返回自定义类型

    ### Ibatis调用Oracle存储过程返回自定义类型 在企业级应用开发中,尤其是在金融、保险等业务场景中,往往需要处理复杂的数据结构与逻辑。本文将深入探讨如何使用Ibatis框架来调用Oracle数据库中的存储过程,并实现...

    mybatis 整合oracle (含增删改查)

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。在实际开发中,将 MyBatis 整合到 Oracle 数据库进行数据操作,包括增删改查,是常见的需求。以下将详细介绍这个过程。 1. **环境准备**...

    ibatis调用存储过程介绍

    在Java开发中,使用iBATIS(现在称为MyBatis)作为持久层框架时,调用数据库的存储过程是一种常见的需求。本文将详细介绍如何使用iBATIS调用存储过程,并提供一个简单的示例来说明其过程。 首先,我们需要在数据库...

    springmybatis

    MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan ...

    MyBatis3.2.6

    **MyBatis** 是一款优秀的持久层框架,它支持普通的 SQL 查询、存储过程以及高级映射功能。该框架的主要目标是简化 JDBC 代码的编写,并消除手动设置参数和提取结果集的过程。通过简单的 XML 或注解配置方式,...

    MyBatis之一(环境搭建)

    在博客“MyBatis之一(环境搭建)”中,作者Yufenfei可能详细讲解了这些过程,帮助初学者快速入门MyBatis框架。通过阅读这篇博客和实践上述步骤,你可以深入理解MyBatis的工作原理,并熟练掌握其使用方法。

    mybatis 使用教程

    - **定义**:MyBatis是一个优秀的持久层框架,它支持普通的SQL查询、存储过程以及高级映射功能。通过使用简单的XML或注解进行配置和原始映射,它可以将接口和Java的POJOs映射成数据库中的记录。 - **优势**: - **...

    springMVC+Mybatis整合环境搭建

    PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"&gt; ${jdbc.driver}"/&gt; ${jdbc.url}"/&gt; ${jdbc.username}"/&gt; ${jdbc.password}"/&gt; ``` ...

    java就业项目-博客系统V3.0带数据库.rar

    在这个项目中,Model层可能包含对数据库的操作,Controller层负责接收请求并调用Model进行处理,最后更新或获取的数据通过View层展示给用户。 3. **数据库设计**:数据库是存储博客文章、用户信息、评论等数据的...

    Javashopv3.0beta2.zip

    JavaShop V3.0 Beta2 是一个基于Java技术开发的电子商务平台的早期版本。这个压缩包包含了一系列用于构建和运行在线商店的源代码、配置文件、数据库脚本以及可能的前端资源。在这个版本中,开发者可能引入了新的特性...

    MyBatsi环境搭建测试

    MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...

Global site tag (gtag.js) - Google Analytics