我使用spring-boot和mysql(对于Win64为8.0.15)进行开发。 我编写并执行了处理以在mybatis(3.5.0)中调用mysql的存储过程,但是 「参数编号3不是OUT参数;嵌套异常为java.sql.SQLException'',但它不能正常工作。 请让我知道如何编写程序或如何使用mybatis。
■存储过程(mysql)
CREATE PROCEDURE testSP(IN id TEXT,IN name TEXT,OUT out0 INTEGER,OUT out1 INTEGER)
BEGIN
SET out0 = 0;
SET out1 = 0;
END;
■Result.java
public class Result{
private int out0;
private int out1;
public int getOut0(){
return out0;
}
public void setOut0(int out0){
this.out0 = out0;
}
public int getOut1(){
return out1;
}
public void setOut1(int out1){
this.out1 = out1;
}
}
■道
public interface testDao{
public Result testSP(String id,String name);
}
■xml(sql查询)
<?xml version>.....
<select id ="testSP" resultType="Result" statementType="CALLABLE">
{call testSP(
#{id,mode=IN,jdbcType=VARCHAR},
#{name,mode=IN,jdbcType=VARCHAR},
#{out0,mode=OUT,jdbcType=INTEGER},
#{out1,mode=OUT,jdbcType=INTEGER}
)
}
</select>
....
■测试码
testDao testdao = new testDao();
System.out.println(testdao.testSP("testid","testname").getOut0());
System.out.println(testdao.testSP("testid","testname").getOut1());
答案 0 :(得分:0)
应该将这些OUT值设置为参数对象。有关详细信息,请参见doc。
因此,您需要将POJO或Map
传递给映射器方法。
void testSP(Param param);
// or
void testSP(Map<String, Object> param);
如果使用POJO,则必须具有所有IN和OUT参数。
public class Param {
private String id;
private String name;
private int out0;
private int out1;
...
基本上,在调用方法之前,先设置IN参数,然后MyBatis将设置OUT参数。
// POJO
Param param = new Param();
param.setId("testid");
param.setName("testname");
mapper.testSP(param);
assertEquals(1, param.getOut0());
assertEquals(2, param.getOut1());
// Map
Map<String, Object> param = new HashMap<>();
param.put("id", "testid");
param.put("name", "testname");
mapper.testSP(param);
assertEquals(1, param.get("out0"));
assertEquals(2, param.get("out1"));