`

Mybatis调用Oracle存储过程,Oracle创建存储过程,Mybatis调用procedure

阅读更多

Mybatis调用Oracle存储过程,Oracle创建存储过程,Mybatis调用procedure

 

================================

©Copyright 蕃薯耀 2020-10-30

http://fanshuyao.iteye.com/

 

 一、Oracle创建存储过程

1、Oracle创建无参数的存储过程procedure

复制代码
--Oracle 创建无参数的存储过程
create or replace procedure csgx_proc_cmm_code_none
as 
begin
  update CMM_CODE l set l.code_value='dd' where l.code_id='proc_01';
  commit;
end;
/

--建立同义词
create or replace public synonym csgx_proc_cmm_code_none for aaaUser.csgx_proc_cmm_code_none;

--授权给用户bbbUser
grant execute on csgx_proc_cmm_code_none to bbbUser;

--PL/SQL调用存储过程
begin
csgx_proc_cmm_code_none;
end;
复制代码

 

2、Oracle 创建有参数的存储过程

复制代码
--Oracle 创建有参数的存储过程
--存储过程的参数名称不能和表的字段同名
create or replace procedure csgx_proc_cmm_code(p_code_id in varchar2, p_code_value in varchar2)
as 
begin
  update CMM_CODE l set l.code_value=p_code_value where l.code_id=p_code_id;
  commit;--新增、修改、删除需要提交
end;
/

--建立同义词
create or replace public synonym csgx_proc_cmm_code for aaaUser.csgx_proc_cmm_code;

--授权给用户
grant execute on csgx_proc_cmm_code to bbbUser;

--PL/SQL调用存储过程
begin
csgx_proc_cmm_code('proc_01', '4444');
end;
复制代码

 

3、Oracle创建select查询的存储过程,Oracle创建带参数的游标存储过程(即创建select的存储过程,并返回查询结果)

复制代码
--Oracle创建带参数的游标存储过程(即创建select的存储过程,并返回查询结果)
--存储过程的参数名称不能和表的字段同名
create or replace procedure csgx_proc_cmm_code_select(p_class_type in varchar2, cur_result out Sys_Refcursor)
as 
begin
  open cur_result for select * from  CMM_CODE l where l.class_type=p_class_type;
end;
/
--创建同义词 create or replace public synonym csgx_proc_cmm_code_select for aaaUser.csgx_proc_cmm_code_select; --授权给别的用户bbbUser grant execute on csgx_proc_cmm_code_select to bbbUser; --PL/SQL调用存储过程 暂时还不知道在PL/SQL如何调用
复制代码

 

二、Mybatis调用存储过程

1、Mybatis调用无参数的存储过程

<update id="callProc" statementType="CALLABLE">
    {call csgx_proc_cmm_code_none}
</update>

statementType="CALLABLE":表示该调用是存储过程,使用select、update、delete标签都可以,但建议根据业务的实际使用标签。

 

2、Mybatis调用有参数的存储过程

复制代码
<update id="callProcParams" statementType="CALLABLE" parameterType="map">
    {call csgx_proc_cmm_code_none(
        #{aaa},
        #{bbb},
        #{bbb}
    )}
</update>
复制代码

参数可以设置成map,这样方便

 

3、Mybatis调用select查询的存储过程,Mybatis调用有参数且返回查询结果的存储过程

复制代码
<resultMap id="myMap" type="java.util.Map">
</resultMap>


带游标的存储过程
<!-- 
javaType=ResultSet时,必须要有resultMap,不然会报错:
Caused by: java.lang.IllegalStateException: Missing resultmap in property 'cur_result'.
Parameters of type java.sql.ResultSet require a resultmap.
--> <select id="callProcSelect" statementType="CALLABLE" parameterType="map"> {call csgx_proc_cmm_code_select( #{p_class_type, jdbcType=VARCHAR}, #{cur_result, jdbcType=CURSOR, mode=OUT, javaType=ResultSet, resultMap=myMap} )} </select>
复制代码

 

下面为对应的存储过程:

create or replace procedure csgx_proc_cmm_code_select(p_class_type in varchar2,cur_result out Sys_Refcursor)

parameterType="map":表示Dao类中的接口方法callProcSelect传进来的参数是一个map对象。注:map是简写,Mybatis自带的,实际是:java.util.Map

#{p_class_type, jdbcType=VARCHAR}:查询条件的参数,可以多个,看实际

#{cur_result, jdbcType=CURSOR, mode=OUT, javaType=ResultSet, resultMap=myMap}:查询返回的结果,查询返回的数据会被放到这个参数,其中:

jdbcType=CURSOR:表示使用游标

mode=OUT:表示输出

javaType=ResultSet:返回结果集

resultMap=myMap:返回结果集转换对应的resultMap,可以配置一个空的,不用映射,直接返回Map对象

 

三、Dao接口调用

Map<String, Object> callProcSelect(Map<String, Object> result);

Map<String, Object> result参数是没有@Param注解的。

如果加了这个注解,如:@Param("map") Map<String, Object> result,xml的参数就要变成map.p_class_type,map.cur_result,不然没有结果返回。

如果参数是map,参数就不要用@Param注解标识,尽量避免问题(反正我折腾了很久才发现这个问题,调用成功了,返回的结果是Null)

 

四、Service调用

1、普通的存储过程调用

procDao.callProc();

 

2、Java带select查询的存储过程调用,带游标的存储过程调用:

复制代码
//声明map对象参数
Map<String, Object> resultMap = new HashMap<String, Object>();
resultMap.put("p_class_type", "proc");

//调用存储过程,将传map参数
procService.callProcSelect(resultMap);

//接收返回的结果集,cur_result这个变量,对应的就是xml配置文件配置的参数
Object o = resultMap.get("cur_result");

//打印输出
log.info("ResultSet===" + JsonUtil.obj2String(o));
复制代码

 

 

================================

©Copyright 蕃薯耀 2020-10-30

http://fanshuyao.iteye.com/

1
1
分享到:
评论

相关推荐

    springboot整合mybatis调用oracle存储过程

    至此,我们就完成了Spring Boot整合MyBatis调用Oracle存储过程并处理游标返回数据的过程。在实际开发中,可以根据需求调整存储过程的逻辑和结果处理方式,以满足各种复杂业务场景。注意,对于大数据量的查询,使用...

    spring mybatis 调用oracle存储过程

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

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

    Mybatis调用Oracle存储过程的方法详解 Mybatis是一款流行的持久层框架,广泛应用于Java企业级应用开发中。 Oracle存储过程是一种高效的数据库操作方式,通过存储过程可以实现复杂的业务逻辑操作。那么,如何使用...

    mybatis调用orclae存储过程

    下面将详细介绍如何使用MyBatis来调用Oracle存储过程。 ### 1. 创建Oracle存储过程 首先,我们需要在Oracle数据库中创建一个存储过程。例如,假设我们有一个名为`INSERT_EMPLOYEE`的存储过程,用于插入新的员工...

    MyBatis调用存储过程

    在MyBatis的映射文件(mapper.xml)中,我们需要为存储过程创建一个`&lt;select&gt;`标签,但与通常的查询不同,这里需要设置`id`(标识符)、`resultMap`(结果映射)以及`statementType="CALLABLE"`,这表明这是一个调用...

    MyBatis调用Procedure+Function.pptx

    使用MyBatis框架配置Oracle和MySql中存储过程与函数的调用。 分别描述了两种方式的实现:基于XML方式和注解方式。 其中Oracle所使用版本为Oracle11g_XE版,MySQL为5.7版本

    Java调用oracle存储过程通过游标返回临时表

    本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...

    Java调用Oracle存储过程的方法

    在Java编程中,调用Oracle数据库的存储过程是常见的任务,尤其在处理复杂业务逻辑或数据操作时。本文将详细讲解如何使用Java调用Oracle存储过程,并提供示例代码。 首先,我们需要了解Java中用于与数据库交互的核心...

    Java调用存储过程--传入集合参数

    通过本文的探讨,我们不仅了解了如何在Java中调用Oracle存储过程并传递集合参数的基本原理,还深入实践了相关的技术细节。这对于构建高性能、高可靠性的企业级应用而言,是不可或缺的知识点。在未来,随着数据量的...

    oracle调用存储过程实现分页

    本篇文章将深入探讨如何在Oracle中通过调用存储过程实现分页功能。 首先,我们需要创建一个存储过程,这个过程将接收两个参数:起始记录编号(一般为当前页数乘以每页显示的记录数)和每页的记录数。存储过程内部会...

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

    ##### 创建存储过程 接下来定义一个存储过程`pro_wealth_deal_detail_array`,该过程接收五个输入参数和一个输出参数,其中输出参数类型为`WEALTH_DEAL_DETAIL_ARRAY`。 ```sql PROCEDURE pro_wealth_deal_detail_...

    SSM+Oracle 存储过程例子

    1. **创建存储过程**:在Oracle数据库中编写存储过程代码。例如,一个简单的增删改查操作的存储过程可能如下: ```sql CREATE OR REPLACE PROCEDURE insert_user (p_name IN VARCHAR2, p_age IN NUMBER) AS ...

    java Oracle存储过程分页整理

    本教程将深入探讨如何在Java中调用Oracle存储过程来执行分页查询。 首先,我们需要理解分页的基本概念。分页是将大结果集分割成多个小部分,每次只加载一部分数据到内存中,这样可以减少内存消耗,提高响应速度。在...

    ibatis调用存储过程介绍

    1. 在数据库中创建存储过程。 2. 在iBATIS映射文件中配置调用存储过程的SQL语句,指定`statementType=CALLABLE`。 3. 在Java代码中,通过`SqlSession`调用存储过程,使用`Map`对象存储输入和输出参数。 通过这种...

    mybatis示例源码.zip

    在 MyBatis 中,调用存储过程需要用到 `&lt;select&gt;` 标签的 `procedure` 属性,并通过 `parameterMap` 或 `params` 来传递输入参数和接收输出参数。 然后,`mybatis由简单到多元`这部分可能涵盖了从基本的单表操作到...

    JAVA调用存储过程

    在实际项目中,你可以利用IDE(如IntelliJ IDEA或Eclipse)的代码补全功能简化存储过程的调用,或者使用ORM框架(如Hibernate或MyBatis)进一步抽象数据库操作。 综上所述,Java调用存储过程涉及到JDBC API的使用,...

    ibatis调存储过程返回游标

    使用`procedure`元素来调用存储过程,如: ```xml &lt;procedure id="pro_test" parameterMap="pro_map"&gt; {call user_account_proc(?,?,?,?)} &lt;/procedure&gt; ``` 这表示将使用之前定义的`pro_map`参数映射来调用`user...

    JAVA 运用存储过程的分页

    1. **创建存储过程**:在数据库管理系统如MySQL、Oracle或SQL Server中,编写存储过程,包含分页查询的逻辑。例如,一个简单的MySQL存储过程可能如下所示: ```sql CREATE PROCEDURE GetPagedData(IN start INT, ...

    ibatis与存储过程(带输出参数的应用)

    1. 不同的数据库系统可能有不同的存储过程调用语法,如Oracle、MySQL、SQL Server等,需要根据具体数据库进行调整。 2. 存储过程中的输出参数在Java代码中必须设置初始值,否则可能会遇到空指针异常。 3. 在Ibatis 3...

Global site tag (gtag.js) - Google Analytics