gpt4 book ai didi

java - Oracle 嵌套表作为 Mybatis 存储过程的输入参数

转载 作者:行者123 更新时间:2023-12-02 12:17:44 30 4
gpt4 key购买 nike

我需要使用 Mybatis 调用一个具有嵌套表类型输入参数的 Oracle 存储过程。

我找不到任何有关 MyBatis 的这种特定用法的文档或示例。

有人以前做过这个,或者看过例子吗?

非常感谢。

最佳答案

让我们举个例子:

程序程序记录 (P_VAL_REC IN 包.RECORD ,P_VAL_NUM IN VARCHAR2 ,P_DAT_VAL 过时日期 );

在您的数据库中重新定义 SP:

程序PROCEDURERECORD_NEW (P_VAL_REC IN RECORD_TYPE(您在类型中创建它) ,P_VAL_NUM IN VARCHAR2 ,P_DAT_VAL 过时日期 );

你应该用 spring 重新配置你的 SP bean :

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">

<bean id="PROCEDURERECORD_NEW" parent="storedProcedure">
<constructor-arg index="0" value="PROCEDURERECORD" />
<constructor-arg index="1" value="false" />
<property name="params">
<list>
<bean parent="sqlRecordParamIn">
<constructor-arg index="0" value="P_VAL_REC" />
<constructor-arg index="2" value="RECORD_TYPE" />
</bean>
<bean parent="sqlNumericParamIn">
<constructor-arg value="P_VAL_NUM" />
</bean>
<bean parent="sqlDateParamOut">
<constructor-arg value="P_DAT_VAL"/>
</bean>
</list>
</property>
</bean>

在您的实现代码中,像这样使用 SqlStructValue:

@Override
public DateTime getSpReturn(RecordClass record,Long valNum){
Map<String, Object> args = new HashMap<String, Object>();
args.put("P_VAL_REC", new SqlStructValue<RecordClass>(record,new RecordClassMapper()));
args.put("P_VAL_NUM", valNum);


Map<String, Object> result = procedureRecordNew.execute(args);
return (DateTime)result.get("P_DAT_VAL");
}

至于映射器,您可以这样创建它:

@Component("RecordClassMapper")
public class RecordClassMapper implements StructMapper<RecordClass> {

@Override
public STRUCT toStruct(RecordClass source, Connection conn, String typeName) throws SQLException {
Object[] objectProperties = new Object[] { new source.getrecordatr1(), source.getrecordatr2(), source.getrecordatr3() };
return new STRUCT(new StructDescriptor(typeName, conn), conn, objectProperties);
}

@Override
public RecordClass fromStruct(STRUCT struct) throws SQLException {
// Auto-generated method stub
throw new UnsupportedOperationException("Not implemented");
}

}

关于java - Oracle 嵌套表作为 Mybatis 存储过程的输入参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46037563/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com