`
zachary.guo
  • 浏览: 487276 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

MyBatis 3 中使用存储过程

阅读更多
        Mybats 是 iBatis 被 Google 收购后重新命名的一个工程,当然也做了大量的升级。iBatis 2.x 调用存储过程有一个专门的标签 <procedure>,在 Mybats 3.x 里面已经没有这个标签了,而是通过一个参数 statementType="CALLABLE" 来区分。

        存储过程有三种类型的参数,分别为 IN(输入参数),OUT(输出参数),INOUT(输入输出参数)。一个存储过程,可以有多个 IN 参数,至多有一个 OUT 或 INOUT 参数。

    ◇ 只有 IN 参数的存储过程
CREATE PROCEDURE proc_only_input (
  @hello VARCHAR(8) IN
) AS 
...

<select id="selectSth" statementType="CALLABLE" parameterType="hashmap">
  <![CDATA[
{ call proc_only_input(#{good, mode=IN, jdbcType=VARCHAR}) }
  ]]>
</select>

Map params = new HashMap();
// 调用存储过程的传递的参数名可以不和定义存储过程的参数名保持一致,只要保证它们的顺序是一致的即可。
params.put("good", "china");
session.select("pkg.selectSth", params);

    ◇ 有 INOUT 或 OUT 参数的存储过程
CREATE PROCEDURE proc_out (
  @yes VARCHAR(8) IN,
  @fly VARCHAR(16) OUT
) AS 
...
return 'return something'

<!-- 
  如果调用的过程中存在 out 参数,那么所有的参数都必须用问号的形式传入,如: { call test_procedure(?, ?, ?, ?)}。要是有参数不是问号形式传入,如:{ call test_procedure(?, 3, ?, ?)},则会异常伺候:Output parameter not allowed as argument list prevents use of RPC

  另外,对于有输出参数的存储过程,理论上也可以这样写:
{ #{gog, mode=OUT, jdbcType=VARCHAR} = call proc_out(#{yes, mode=IN, jdbcType=VARCHAR}) }

  可我在 sql server 中尝试这样写,报错,说是却是 @fly 参数(proc_out 的第二个参数的名字就是 fly)。既然如此,那我就一个一个参数的写,就像下面的这样。
-->
<select id="selectSth" statementType="CALLABLE" parameterType="hashmap">
  <![CDATA[
{ call proc_out(#{yes, mode=IN, jdbcType=VARCHAR}, #{gog, mode=OUT, jdbcType=VARCHAR}) }
  ]]>
</select>

Map params = new HashMap();
// 调用存储过程的传递的参数名可以不和定义存储过程的参数名保持一致,只要保证它们的顺序是一致的即可。
// 同时,存储过程的输出参数的值必须通过 map 来接收
params.put("yes", "china");
session.select("pkg.selectSth", params);
// 得到输出参数的值
String result = params.(String) get("gog");
分享到:
评论
3 楼 mrluo735 2016-11-22  
明显不对,INOUT参数也可以有多个!
2 楼 qitianhuoshen 2016-04-12  
问一下 如果 配合 datatables的 searchvalue  模糊查询一些 关联其他表的一些字段 要怎么查询


我知道我截图的地方不对,就想说要怎么做才行。
1 楼 cczzyc 2015-11-10  
太好了,对我非常有用,感谢分享    

相关推荐

    springboot mybatis 动态调用oracle存储过程,通过存储过程名称,就能动态调用存储过程、java动态调用or

    能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来,这个就通用了。只写一个通用方法,就可以调用所有的存储过程。只根据输入不同的存储过程名称、参数内容,自动调用...

    mybatis调用orclae存储过程

    总结,通过以上步骤,我们可以使用MyBatis成功地调用Oracle数据库中的存储过程。这使得Java应用程序可以灵活地利用数据库提供的复杂逻辑,同时保持MyBatis的简单易用性。注意,实际应用中可能需要考虑事务管理、异常...

    mybatis调用mysql存储过程

    本篇将详细阐述如何使用MyBatis调用MySQL中的存储过程,帮助你深入理解这一核心技能。 首先,我们需要了解存储过程的基本概念。存储过程是预编译的SQL语句集合,它封装了多个操作,可以在数据库服务器上执行,提高...

    springboot整合mybatis调用oracle存储过程

    本文将深入探讨如何在Spring Boot项目中整合MyBatis,实现调用Oracle存储过程并处理游标返回的数据。 首先,我们需要在Spring Boot项目中引入相关的依赖。在`pom.xml`文件中添加Oracle JDBC驱动(ojdbc66-oracle...

    MyBatis调用存储过程

    下面将详细介绍如何在MyBatis中配置和使用存储过程。 ### 1. 配置MyBatis XML映射文件 在MyBatis的映射文件(mapper.xml)中,我们需要为存储过程创建一个`&lt;select&gt;`标签,但与通常的查询不同,这里需要设置`id`...

    mybatis调用存储过程

    (1)在MyBatis的Mapper XML文件中,定义一个 `&lt;select&gt;` 标签,但使用 `id` 属性标识存储过程的名称,而非SQL查询语句。例如: ```xml {call your_schema.your_procedure(?, ?)} ``` 这里的 `your_schema` 是...

    mybatis调用存储过程源码

    - 有时存储过程返回多个结果集,这时需要在Mapper XML中使用`&lt;resultMap&gt;`标签来处理。 这个提供的"mybatis调用存储过程源码"压缩包,包含了一个完整的MyBatis调用存储过程的示例,解压后可以直接运行,帮助开发者...

    spring mybatis 调用oracle存储过程

    本文将深入探讨如何在Spring和MyBatis集成环境中调用Oracle数据库的存储过程,包括无返回值、返回结果集以及返回多个结果的情况。 首先,让我们理解基础概念。Spring是一个全面的后端开发框架,它提供了依赖注入、...

    MyBatis调用MYSQL存储过程

    MyBatis调用MYSQL存储过程 返回多行 引用的包: asm-3.1.jar cglib-2.2.jar commons-logging-1.1.1.jar log4j-1.2.13.jar mybatis-3.0.4.jar mysql-connector-java-5.1.13.jar slf4j-api-1.5.8.jar slf4j-log4j12-...

    spring mvc + mybatis 调用mysql 存储过程

    本文将详细讲解如何在Spring MVC和MyBatis集成的项目中调用MySQL存储过程。 首先,让我们理解存储过程的概念。存储过程是在数据库中预编译的一组SQL语句,可以包含输入、输出和内部参数,能够执行复杂的业务逻辑。...

    mybatis+mysql 使用存储过程生成流水号的实现代码

    本篇文章将深入探讨如何在MyBatis框架中结合MySQL存储过程来生成流水号。 首先,存储过程`GetSerialNo`接受一个输入参数`tsCode`,类型为VARCHAR(50),并返回一个VARCHAR(200)类型的`result`。该过程的主要目的是为...

    MyBatis3官方中文文档

    MyBatis可以与各种数据库交互,并支持定制化SQL、存储过程以及高级映射。在了解MyBatis之前,我们需要明白持久层框架的作用主要是用于解决Java应用程序与数据库之间的交互问题。 首先,MyBatis的入门安装很简单,...

    MySql存储过程以及MyBatis3

    MySQL存储过程和MyBatis3是数据库管理和Java开发中的两个重要概念。MySQL是世界上最流行的开源关系型数据库管理系统,而MyBatis则是一个优秀的持久层框架,它简化了Java应用程序与数据库之间的交互。在这个主题中,...

    Mybatis调用Oracle存储过程的方法图文详解

    那么,如何使用Mybatis调用Oracle存储过程呢?本文将详细介绍Mybatis调用Oracle存储过程的方法。 无参数存储过程的调用 首先,需要创建一个无参数的存储过程。例如,创建一个名为`proc_no_param`的存储过程,用于...

    Mybatis调用MySQL存储过程的简单实现

    1. 在MyBatis的Mapper XML文件中定义SQL映射,使用`&lt;select&gt;`标签,并设置`id`属性为存储过程名,`resultType`属性为返回结果的数据类型。由于存储过程不返回普通的SQL查询结果,所以使用`statementType="CALLABLE"`...

    关于Mybatis 中使用Mysql存储过程的方法

    Mybatis 中使用 Mysql 存储过程的方法 Mybatis 是一个基于 Java 的持久层框架,提供了一个抽象的数据访问层,使开发者可以将业务逻辑和数据访问逻辑分离。Mysql 是一个流行的关系型数据库管理系统,而存储过程是 ...

    mybatis 3 中文 指南

    MyBatis是一个卓越的持久层框架,它支持传统的SQL查询、存储过程以及高级的映射功能。通过简化JDBC代码、参数手动设置及结果集检索,MyBatis极大提升了开发效率。其核心特性在于使用XML或注解进行配置与映射,将接口...

    MyBatis3 API 中文文档

    它支持普通的SQL查询、存储过程和高级映射,可以用来处理复杂的SQL,例如联表查询等,并且支持动态SQL语句,这在处理有较多条件判断的场景时尤其有用。 2. MyBatis核心组件 - SqlSessionFactory:它是创建...

    MyBatis3中文官方文档

    - **定义**:MyBatis是一个优秀的持久层框架,它支持普通的SQL查询、存储过程以及高级映射。通过使用简单的XML或注解进行配置和原始映射,可以将接口和Java的POJOs(Plain Old Java Objects,即普通的Java对象)映射...

    MyBatis 3 中文参考文档

    MyBatis是一个流行的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及结果集的检索。MyBatis使用简单的XML或注解来配置和映射原生信息,将Java的POJOs...

Global site tag (gtag.js) - Google Analytics