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/
相关推荐
能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来...只根据输入不同的存储过程名称、参数内容,自动调用不同的存储过程。 已经使用在多个项目中 全开源项目 请放心下载
在已有的spring+mybatis 基本操作oracle数据库的基础上,增加了3个调用存储过程的例子:无返回值、返回结果集、返回多个结果,希望对大家能有所帮助
主要介绍了Mybatis调用Oracle存储过程的方法介绍,需要的朋友可以参考下
ibatis调用oracle存储过程分页
springboot继承mybatis后,通过mybatis调用oracle数据库中创建的存储过程,并获取通过游标返回的数据。
mybatis调用Oracle存储过程(无参、有入出参)等各种情况例子的详细使用方法 1.无参存储过程调用 2.入参存储过程调用 3.出参存储过程调用 4.入 和 出 参存储过程调用,以及获取出参结果 5.结果集存储过程调用
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-...
mybatis调用orclae存储过程
怎么利用MyBatis传List类型参数到数据库存储过程中实现批量插入数据?接下来通过本文给大家介绍Mybatis传list参数调用oracle存储过程,需要的朋友可以参考下
spring mvc + mybatis 调用mysql 存储过程
这是mybatis调用存储过程的代码
JAVA通过MyBatis调用MySql存储过程和函数doc文档合集整理.zip
项目中用到了Mybatis调用PostgreSQL存储过程(自定义函数)相关操作,由于PostgreSQL自带数组类型,所以有一个自定义函数的入参就是一个int数组,形如: 代码如下:CREATE OR REPLACE FUNCTION “public”.”func_...
mybatis调用mysql中的存储过程方法详解
怎么使用MyBatis调用存储过程,步骤详细清楚,一看就会配置
使用maven+springMVC+mybatis编写的项目例子,如果有需要的可以下载,里面还用到了mybatis调用储存过程。
完整的mybatis调用存储过程,解压解压后附加就可使用,注释详细
本篇文章主要介绍了Mybatis调用MySQL存储过程的简单实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
使用MyBatis框架配置Oracle和MySql中存储过程与函数的调用。 分别描述了两种方式的实现:基于XML方式和注解方式。 其中Oracle所使用版本为Oracle11g_XE版,MySQL为5.7版本
Java调用Oracle存储过程的方法