当前位置:首页 » 存储配置 » mybatis存储过程oracle

mybatis存储过程oracle

发布时间: 2022-09-15 00:40:58

A. Oracle中存储过程返回自定义的集合类型,java中使用mybatis返回List集合类型

存储过程我不太熟,给你一个调用储存过程mybatis的实例参考:

<mappernamespace="entity.puserMapper">	
<!--调用存储过程-->
<selectid="getCount"parameterMap="getUserCountMap"statementType="CALLABLE">
CALLmyts.ges_user_count(?,?)
</select>
<parameterMaptype="java.util.Map"id="getUserCountMap">
<parameterproperty="sexid"mode="IN"jdbcType="INTEGER"/>
<parameterproperty="usercount"mode="OUT"jdbcType="INTEGER"/>
</parameterMap>
</mapper>

主要是定义好parameterMap就行了

B. mybatis怎么调用oracle存储过程

create or replace procere my_procere(mypageNo number,mypageSize number,myInfo_Cursor out sys_refcursor)aspageNO number;pageSize number;begin open myInfo_Cursor for select * from proct where pid between 1 + (pageNo - 1) * pageSize and 4 + (pageNo - 1) * pageSize; end;

C. mybatis为什么调用不了存储过程

1、 sqlserver oracle sqlserver返回结果集是可以不要out参数的。如果sql中用的是select出结果,不需要配置out参数。多个结果集/结果集可以配置resultMap 来返回LIST,主要是调用selectList方法会自动把结果集加入到list中去的。
2 、sql有返回值 用select标签 。
3 、注意sql参数和mybatis参数的对应关系,这个这里就不讲了。
4、 注意参数个数 。

D. mybatis 调用存储过程进行批量修改操作(只需要一次调用存储过程),不知道如何配置配置文件

public class test
{
public static void main(String[] args)
{
Circle C=new Circle(4);
Rectangles Rt=new Rectangles(4, 4);
Triangle T=new Triangle(6,7);
C.Area();
Rt.Area();
T.Area();
}
}

E. mybatis 存储过程有CHAR类型的输出

1.无输入和输出参数的存储过程,我写了一个比较简单的,需要注意的是Oracle无参存储过程不能写括号
[sql]
view
plain

CREATE
OR
REPLACE
Procere
cascadeoperation
As
Begin
Delete
From
teacher
Where
id=1;
Update
studentdetail
Set
address='宁波市海曙区'
Where
studentid=10;
End;
这里执行了2个操作,可能用过mybatis的人会迷惑执行的时候到底使用update标签呢还是delete标签,其实都行,我也试过select标签也是OK的,下面是部分的配置文件
[html]
view
plain

<delete
id="cascadeOperation"
statementType="CALLABLE"
>
{call
cascadeoperation}
</delete>
2.带有输入和输出参数的存储过程,我这里加入了if
else的几个判断
[sql]
view
plain

CREATE
OR
REPLACE
Procere
queryTeacher(fid
In
Integer,Type
In
Varchar,Name
Out
Varchar)

F. mybatise怎样调用存储过程

如何使用Myts调用数据库中的存储过程,下面以Oracle数据库的为例: 1.在数据库中创建以下的存储过程: 2.编写SQL映射文件WxclDAO.xml: 其中statementType="CALLABLE"表示要调用存储过程,parameterType参数类型; jdbcType对应数据库中的...

G. 请问MyBatis.net 如何执行一个不需要参数但返回结果集的oracle数据库的存储过程

创建或替换过程p_selTabSpace(卷

dba_data_files.tablespace_name%型)

VAR1 dba_data_files.tablespace_name%型;

VAR2号码;

VAR3号码;

VAR4号码;

选择A.A1“tabSpaceName”,b.b2/1024/1024“tabSpaceSize”,圆((b.b2 -

a.a2)/ 1024 / 1024 2)“tabSpaceUsed”,SUBSTR((b.b2 - a.a2)/ b.b2,1,

7)“tabSpaceVused”;为VAR1,VAR2,

VAR3,VAR4

(选择TABLESPACE_NAME A1,SUM(NVL(字节,0))A2

从DBA_FREE_SPACE

组由TABLESPACE_NAME)一,

(从DBA_DATA_FILES选择TABLESPACE_NAME B1,SUM(字节)B2

组由TABLESPACE_NAME)B,

(选择TABLESPACE_NAME C1,C2的内容,extent_management C3

从DBA_TABLESPACES):C

其中A.A1 = UPPER(V1)和A.A1 = b.b1和C.C1 = b.b1;

DBMS_OUTPUT.PUT_LINE('tabSpaceName是'| | UPPER(VAR1)| |'

'| |'tabSpaceSize'| | VAR2 | |'' | |'tabSpaceUsed'| | VAR3 | |'

'| |'tabSpaceVused'| | VAR4);

完;

--------------------------------测试------------- ------------

EXECUTE p_selTabSpace('系统');

你想要的结果集是用来存储数据或多个行存储数据的单排,如果是后者的话,只需选择...到...这方法未实现,因为你不能超过一个系列的所有支付给同一个变量,它是用SELECT ... INTO ...这方法的限制,如果你要存储多行去楼上说的结果结果作为使用光标或复杂数据类型即可。

H. myBatis 调用 Oracle 存储过程,报错,求解答

你的语句有问题 在oracle客户端执行过了 再往mybatis里面贴

I. mybatis怎样接收oracle数据库存储过程所返回的Table类型数据和array

帮你看了半天,没有找到好的解决办法,变相方法是可以在plsql中返回一个ref cursor,java中直接用resultset就能接收了。

希望其他人能回答你的问题吧。。

J. mybatis 连oracle 为什么返回了row

比如统计一个单位不同职务级别女人数量、少数民族数量、30岁以上人员数量,40以上人员数量等。如:
董事长:0 0 0 1
中层领导:2 2 3 8
职员:20 40 80 200
刚开始想办法拼成了一个超级长的sql来做,但是最后长度超过vachar2的最大长度了,虽然有其他办法解决,虽然最大sql看起来很美好,但是想想后期的优化和维护,还是决定重新来规划。中间的过程就不说了,最终确定先定义一行数据存number型object(类似一维数组),形式如(0,0,1)。然后放到二维数组里。闲言少叙,如下定义:
[html] view plain 在CODE上查看代码片派生到我的代码片create or replace
TYPE C_ROW IS OBJECT(
COUNT_SEX NUMBER, --性别女统计
COUNT_NATION NUMBER, --少数民族统计
COUNT_30AGE NUMBER --30岁统计
);
[html] view plain 在CODE上查看代码片派生到我的代码片create or replace
TYPE C_ROW_CLM IS TABLE OF C_ROW;
关于以上的语法我就不解释了。C_ROW_CLM 就是二维数组。
一个简单的存储过程如下:就是往二维数组放了三列。
[html] view plain 在CODE上查看代码片派生到我的代码片PROCEDURE COUNT_TEST(C_VALUE OUT C_ROW_CLM) ASBEGIN
--初始化二维数组,存放格式如:(0,1,2,3),(0,0,2,3)C_VALUE:=C_ROW_CLM();
C_VALUE.extend;
C_VALUE(1) := C_ROW(0,0,0);
C_VALUE.extend;
C_VALUE(2) := C_ROW(1,2,3);
C_VALUE.extend;
C_VALUE(3) := C_ROW(7,8,9);
NULL;
END COUNT_TEST;
以上存储过程生成而为数据已经有了,我们有一个out输出。现在就看mybatis如何实现了。
目前能查到的文章大部分是关于Java如何自定义类型到数据库的举例,官方文档也是,找到一篇文章很不容易,不过最终还是找到了。现在回头看很简单,由于我们自己定义的二维数组java不认识,需要我们自定义类型做数据转换,mybatis提供了TypeHandler接口,只要实现它就可以。里面有几个方法,官方例子主要介绍了setParameter、getResult(ResultSet arg0, int arg1)两个方法,这两个方法共同完成的是java对数据库的操作以及数据类型转换,而我们的存储过程调用是不用他们的,我们用的是getResult(CallableStatement cs, int arg1)这个方法,在这里实现数据类型转换即可。具体事例如下:
[html] view plain 在CODE上查看代码片派生到我的代码片package com.broadengate.handler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import oracle.sql.Datum;
import oracle.sql.STRUCT;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;import com.XX.bean.CountRefMgrPerson;
/**
* 自定义Handler
*/
public class CRMPTypeHandler implements TypeHandler<Object> {public Object getResult(ResultSet arg0, String arg1) throws SQLException {// TODO Auto-generated method stub
return null;
}
public Object getResult(ResultSet arg0, int arg1) throws SQLException {// TODO Auto-generated method stub
return null;
}
/**
* 调用存储过程实现该方法即可。
* @param cs 返回结果
* @param arg1 返回索引
*/
public Object getResult(CallableStatement cs, int arg1)throws SQLException {
// cs.getConnection();
// 此处是excel y方向数据
String names[] ={"董事长","中层领导","职员"};// 遍历y方向数据
int i = 0;
// 定义结果集, XXDTO是我们自己定义的bean,用来与统计数量一行数据一一对应。
List< XXDTO > dtos = new ArrayList< XXDTO >();ResultSet rs = cs.getArray(arg1).getResultSet();while (rs.next()) {
Datum[] data = ((STRUCT)rs.getObject(2)).getOracleAttributes();XXDTO dto = new CountRefMgrPerson();
// key_value赋值
dto.setDataValue(names[i]);
i ++;
// 以下操作取得数据库中数据值赋给相应的bean。
dto.setSex(data[0].intValue());
dto.setNation(data[1].intValue());
dto.setDegreeCodeDoctor(data[2].intValue());// 获得list
dtos.add(dto);
}
return dtos;
}
public void setParameter(PreparedStatement ps, int arg1, Object arg2,JdbcType arg3) throws SQLException {
// TODO Auto-generated method stub
}
}
[html] view plain 在CODE上查看代码片派生到我的代码片package com.xx.bean;
public class CountRefMgrPerson extends BaseBean {private Integer id;// null
private String dataValue;// 纵列数值( {"董事长","中层领导","职员"};等值 )private Integer countNation;// 民族(少数民族)数量private Integer countSex;// 性别(女)数量[html] view plain 在CODE上查看代码片派生到我的代码片<pre name="code" class="html"><span style="white-space:pre"> </span>private Integer count30;// age数量get、set方法略}
这样我们就完成了数据转换的操作,剩下的工作就是配置mybatis了。为了找到这个方法,憋屈了一天,国内几乎没啥资料,老外的帖子也几乎翻遍了,后来终于在一个老外的回复中找到了答案。不啰嗦了,直接上答案:
[html] view plain 在CODE上查看代码片派生到我的代码片<resultMap type="com.broadengate.bean.CountRefMgrPerson" id="clist">
<!-- 职级-->
<result property="sex" column="COUNT_SEX"/>
<!-- 民族-->
<result property="nation" column="COUNT_NATION" />
<!-- 性别-->
<result property="degreeCodeDoctor" column="COUNT_BOSHI"/>
</resultMap>
[html] view plain 在CODE上查看代码片派生到我的代码片<!-- 存储过程调用-->
<select id="queryByList" statementType="CALLABLE" parameterType="Object">
{call TEST.COUNT_TEST(
#{result ,mode=OUT, javaType=java.util.List,jdbcType=ARRAY,jdbcTypeName=C_ROW_CLM, resultMap=clist,typeHandler=com.xx.handler.CRMPTypeHandler}
)}
</select>
相信上面的配置,用mybatis的人都知道,这里我只强调两点,一是typeHandler=com.xx.handler.CRMPTypeHandler需要指定我们自己的自定义类型,而是必须加jdbcTypeName,这个name坑爹啊,让我找了很长时间,其实就是我们out的那个类型C_ROW_CLM。值得一提的是,不要把一维数组和二维数组定义在包体内,调用存储过程是找不到的。
对了顺便放一下,我接受out参数的类。
[html] view plain 在CODE上查看代码片派生到我的代码片import java.util.List;
import com.xx.bean.XXDTO;
public class XXModel {
private List< XXDTO > result; // 调用存储过程返回的结果集public List< XXDTO > getResult() {
return result;
}
public void setResult(List< XXDTO > result) {this.result = result;
}
}
类里的result与mybatis配置里的返回结果result对应。
ok了。

热点内容
云服务器不用开电脑吗 发布:2025-01-17 01:39:39 浏览:71
csql分页 发布:2025-01-17 01:35:11 浏览:707
序列比对算法哪年出现 发布:2025-01-17 01:35:05 浏览:754
我的世界怎么看服务器高度 发布:2025-01-17 01:30:02 浏览:888
jap服务器环境搭建 发布:2025-01-17 01:22:37 浏览:996
铜镜数据库 发布:2025-01-17 01:08:57 浏览:673
上传图片链接 发布:2025-01-17 01:08:11 浏览:891
智跑买车可以提哪些配置 发布:2025-01-17 01:06:46 浏览:463
qq2013源码 发布:2025-01-17 01:06:35 浏览:94
sql的decode 发布:2025-01-17 01:01:01 浏览:4