繁体   English   中英

如何从MyBatis Java调用存储过程?

[英]How to call a stored procedure from MyBatis Java?

我收到错误:

org.mybatis.spring.MyBatisSystemException:嵌套异常是org。 阿帕奇。 ibatis的。 exceptions.PersistenceException:

java.lang.IllegalArgumentException:Mapped Statements集合不包含..的值。“

当我使用Java从mybatis调用存储过程时。

我使用PostgreSQL作为数据库和Spring MVC框架。 为此,我的DAO类调用存储过程是:

Orders orders=new Orders();

值以编程方式设置为order变量。

Integer insert= getSqlSession().insert("records",orders);**

我的mybatis文件看起来像这样:

<insert id="records" parameterType="Orders" statementType="CALLABLE">
 {call fn_records_tbl(#{rId,javaType=Integer,jdbcType=INTEGER,mode=IN},#{state,javaType=String,jdbcType=CHAR,mode=IN},#{uId,javaType=Integer,jdbcType=INTEGER,mode=IN},#{status,javaType=String,jdbcType=CHAR,mode=IN})}
</insert>

我的存储过程语法是:

CREATE OR REPLACE FUNCTION fn_records_tbl(rId integer, state character,uId integer, status character)

RETURNS void AS

$BODY$
DECLARE

    -- my code
BEGIN

    -- my code
END

$BODY$

LANGUAGE plpgsql VOLATILE
COST 100;

ALTER FUNCTION fn_records_tbl(integer, character, integer, character)
OWNER TO mydba;

我传递参数的实体类是:

 public class Orders implements Serializable {

  private static final long serialVersionUID = 267216928694677437L;
  private Integer uId;
  private Integer rId;
  private String status;
  private String state;

     // here are my setter and getter
 }

我在MyBatis和存储过程中调用存储过程的语法都是正确的。

因为我正在使用Spring框架,所以由于某些传递依赖,我的存储过程不是从java中的MyBatis调用。

所以我检查了我的pom.xml文件以找到传递依赖,然后我排除了MyBatis的所有依赖项,并使用最新版本的MyBatis for spring framework。

现在它正常工作。

尝试将配置从insert更改为select

<select id="records" parameterType="Orders" statementType="CALLABLE">
 {call fn_records_tbl(#{rId,javaType=Integer,jdbcType=INTEGER,mode=IN},#{state,javaType=String,jdbcType=CHAR,mode=IN},#{uId,javaType=Integer,jdbcType=INTEGER,mode=IN},#{status,javaType=String,jdbcType=CHAR,mode=IN})}
</select>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM