今天用到了mybatis3 调用oracle的存储过程,这存储过程仅负责查询数据和返回查询结果
oracle的存储过程,如果要查询数据必须有一个游标供使用
先看下简单的存储过程
CREATE OR REPLACE PROCEDURE zdrqlx_PROC ( V_TEMP OUT zdrqlxPackage.zdrqlx_cursor ) AS BEGIN OPEN V_TEMP FOR SELECT LXMC FROM TBGW_ZHDRQFL ; END zdrqlx_PROC;
这个存储过程查询后 结果是 一列数据 列名 LXMC
下面贴查询mybatis的配置
<resultMap id="teshurenqunMap" type="bean.admin.menus.ZhongDianRenQunBean" > <result column="lxmc" property="lxmc" /> </resultMap> <select id="selectByMap" parameterType="map" statementType="CALLABLE" > { call zdrqlx_PROC(#{listinfo,mode=OUT,jdbcType=CURSOR,javaType=java.sql.ResultSet,resultMap=teshurenqunMap})} </select>
程序调用的是selectByMap 这个方法 在调用的时候 需要传入一个参数 这里参数名是map ,map内可以什么属性都没有, 在mybatis调用存储过程后,会把数据 回塞给这个map
所以 如果你的程序是 Map resultmap = dao.selectByMap(map);
然后去读取resultmap ,结果会是null的 什么都没有,而数据实际上在被存在参数的map里面 而不是resultmap (map 是参数map,resultmap 是返回接收的) 这点很重要,我被卡住了半天!!!
下面是调用 看了上面一段话 下面的程序一目了然
Map map = new HashMap(); menusService.getToolsBarMunus(map);//这里调用selectByMap map.put("success", true); //这边数据会存在这个参数map里,是被回填的了 datas.append(com.alibaba.fastjson.JSON.toJSONString(map));
com.alibaba.fastjson.JSON.toJSONString(map)
这句话是用的json组件转化map得到string,结果是下面的
{"listinfo":[{"lxmc":"张三"},{"lxmc":"李四"},{"lxmc":"王五"}{"lxmc":"赵六"}]}
根据结果,反过来看调用存储过程
{ call zdrqlx_PROC(#{listinfo,mode=OUT,jdbcType=CURSOR,javaType=java.sql.ResultSet,resultMap=teshurenqunMap})}
1. listinfo 这个是第一个参数,我是随意写的,不和任何东西管理,看下上面json转化后的map结果就明白了
2 mode=OUT 声明此参数作为输出类型
3 jdbcType=CURSOR 说明他是游标 因为这个存储过程主要是查询,需要传入一个游标参数,不信的话你在plsql里面test存储过程 看下面就明白了
4 javaType=java.sql.ResultSet, 貌似固定要求这样,求大神解答
5 resultMap 必须有这个参数 我这里配置的 是resultMap id="teshurenqunMap" 对应的
最后是我的bean 也就是resultMap 设置的type=
package bean.admin.menus; import java.util.List; public class ZhongDianRenQunBean { private String lxmc; public String getLxmc() { return lxmc; } public void setLxmc(String lxmc) { this.lxmc = lxmc; } }
讲的很乱 希望能对碰到类似问题的同学有所帮助。。。
相关推荐
能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来...只根据输入不同的存储过程名称、参数内容,自动调用不同的存储过程。 已经使用在多个项目中 全开源项目 请放心下载
至此,我们就完成了Spring Boot整合MyBatis调用Oracle存储过程并处理游标返回数据的过程。在实际开发中,可以根据需求调整存储过程的逻辑和结果处理方式,以满足各种复杂业务场景。注意,对于大数据量的查询,使用...
ibatis调用oracle存储过程分页
Mybatis调用Oracle存储过程的方法详解 Mybatis是一款流行的持久层框架,广泛应用于Java企业级应用开发中。 Oracle存储过程是一种高效的数据库操作方式,通过存储过程可以实现复杂的业务逻辑操作。那么,如何使用...
通过以上步骤,开发者可以在Spring和MyBatis环境中顺利地调用Oracle存储过程,实现复杂业务逻辑的处理。这不仅可以提高代码的可维护性,还能利用数据库的优势来优化性能。在进行这类操作时,一定要注意参数类型、...
下面将详细介绍如何使用MyBatis来调用Oracle存储过程。 ### 1. 创建Oracle存储过程 首先,我们需要在Oracle数据库中创建一个存储过程。例如,假设我们有一个名为`INSERT_EMPLOYEE`的存储过程,用于插入新的员工...
"Mybatis调用Oracle存储过程传List参数解决方法" Mybatis是当前最流行的持久层框架之一,它提供了强大的数据访问和操作功能。但是,如何将List类型参数传递给Oracle存储过程,实现批量插入数据却是一个棘手的问题,...
在Spring Boot应用中,调用Oracle数据库的存储过程有多种方式。本文主要介绍三种方法,包括使用`entityManagerFactory.unwrap(SessionFactory.class).openSession()`、直接使用`EntityManager`的`...
mybatis调用Oracle存储过程(无参、有入出参)等各种情况例子的详细使用方法 1.无参存储过程调用 2.入参存储过程调用 3.出参存储过程调用 4.入 和 出 参存储过程调用,以及获取出参结果 5.结果集存储过程调用
在IT领域,特别是数据库操作与Java开发中,利用ibatis框架调用Oracle存储过程是一个常见的需求,这不仅能够提升代码的执行效率,还能增强应用程序的安全性。本文将深入解析ibatis如何与Oracle数据库中的存储过程进行...
本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...
MyBatis作为一款流行的Java持久层框架,提供了调用存储过程的功能。下面将详细介绍如何在MyBatis中配置和使用存储过程。 ### 1. 配置MyBatis XML映射文件 在MyBatis的映射文件(mapper.xml)中,我们需要为存储...
总结起来,Mybatis调用PostgreSQL存储过程并处理数组参数的关键步骤包括: 1. 在PostgreSQL中创建带有数组参数的存储过程。 2. 自定义一个TypeHandler,实现对数组类型的转换。 3. 在Mybatis的Mapper XML中配置`...
本文将详细讲解如何使用Java调用Oracle存储过程,并提供示例代码。 首先,我们需要了解Java中用于与数据库交互的核心类,包括`java.sql.Connection`、`java.sql.CallableStatement`和`java.sql.Types`。`Connection...
通过本文的探讨,我们不仅了解了如何在Java中调用Oracle存储过程并传递集合参数的基本原理,还深入实践了相关的技术细节。这对于构建高性能、高可靠性的企业级应用而言,是不可或缺的知识点。在未来,随着数据量的...
在本实验中,我们将讨论如何创建、测试Oracle存储过程,并在MyBatis框架中调用它。 首先,我们创建了一个名为`menus`的表,用于存储菜单数据。表结构包括以下字段:`id`(主键,整型)、`c_parent_id`(父ID,整型...
MyBatis 调用 Oracle 存储过程返回复杂结果集 MyBatis 是一种基于 Java 的持久层框架,提供了对数据库的交互操作。然而,在 MyBatis 的官方文档中,并没有对如何调用 Oracle 存储过程的介绍,导致了网络上的资料...
### Ibatis调用Oracle存储过程返回自定义类型 在企业级应用开发中,尤其是在金融、保险等业务场景中,往往需要处理复杂的数据结构与逻辑。本文将深入探讨如何使用Ibatis框架来调用Oracle数据库中的存储过程,并实现...