【问题标题】:How to call a stored procedure from MyBatis Java?如何从 MyBatis Java 调用存储过程?
【发布时间】:2012-09-04 06:31:21
【问题描述】:

我收到错误:

org.mybatis.spring.MyBatisSystemException: 嵌套异常是 org.阿帕奇。伊巴蒂斯。异常.PersistenceException:

java.lang.IllegalArgumentException:映射语句集合不包含 .. 的值”

当我使用 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
 }

【问题讨论】:

  • 你能在这里添加你的映射器代码并给出完整的错误信息吗?

标签: java spring stored-procedures mybatis


【解决方案1】:

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

由于我使用的是 Spring 框架,因此由于某些传递依赖,我的存储过程没有从 java 中的 MyBatis 调用。

所以我检查了我的 pom.xml 文件以找到传递依赖项,然后我排除了 MyBatis 的所有这些依赖项,并将最新版本的 MyBatis 用于 spring 框架。

现在它可以正常工作了。

【讨论】:

  • 你能说得更具体点吗?我对 MyBatis 3 和 Oracle 11g 有同样的问题
【解决方案2】:

尝试将您的配置从 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>

【讨论】:

  • 这不是问题,我通过更改MyBatis jar的版本来解决它。我得到它的最新版本。
猜你喜欢
  • 2020-02-24
  • 2013-03-18
  • 1970-01-01
  • 2015-11-02
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 2021-02-11
相关资源
最近更新 更多