我想使用注释将SQL Server存储过程映射到MyBatis。
@Select(value = "{call sp_cen_obliczcene(" +
"#{wytworId, mode=IN, jdbcType=NUMERIC}, " +
"#{rodzajCenyId, mode=IN, jdbcType=NUMERIC}, " +
"#{walutaId, mode=IN, jdbcType=NUMERIC}, " +
"#{jmId, mode=IN, jdbcType=NUMERIC}, " +
"#{ilosc, mode=IN, jdbcType=DECIMAL}, " +
"#{data, mode=IN, jdbcType=DATE})}")
@Result(property = "kwota", column = "kwota", javaType = BigDecimal.class, jdbcType = JdbcType.DECIMAL)
@Options(statementType = StatementType.CALLABLE)
public DtoCena dajCene(CriteriaCena parametry);
该过程选择了一行 - 我只关心一列。现在,我已经映射了一个过程,只不过我有多行并从它们中选择了多个列。一切都很完美。当我类似地映射新的过程时,我遇到了错误:
### The error occurred while setting parameters
### SQL: {call sp_cen_obliczcene(?, ?, ?, ?, ?, ?)}
### Cause: java.lang.NullPointerException
我启动了SQL Profiler并发现该存储过程以给定的参数正确调用。我注意到我正在映射的存储过程执行其他过程。它们执行一些更新操作。当我将我的注释更改为@ Update时,我收到了另一个错误:整数无法转换为DtoCena类型。我将方法的返回值更改为Integer,并且没有错误,但是正如您所猜测的那样,它没有返回我想要的内容。
问题是,我可以映射更新表并返回ResultSet的存储过程吗?我可以使用JDBC来实现这一点,但是在MyBatis中是否可能?当使用@Select注释时我做错了什么吗?