【发布时间】:2013-12-18 16:54:03
【问题描述】:
我想使用 MyBatis 和 Spring 从 Java 调用 MySQL 存储过程。我需要使用 POJO 吗?
我正在使用以下版本:
- Java 1.6
- MyBatis 3.2.2
- Spring / MyBatis
- 1.2 春天 3.2.3
- MySQL 5.1
以下代码 sn-ps 代码确实工作。
映射器 XML:
<update id="calculateNonTaxableOrderAmount"
parameterType="CalculateNonTaxableAmountDTO"
statementType="CALLABLE" >
{ call sp_calc_non_taxable_order_amount(
#{orderNum,jdbcType=INTEGER,mode=IN},
#{nonTaxableAmount,jdbcType=DECIMAL,mode=OUT} )
}
</update>
DAO接口上的方法:
public void calculateNonTaxableOrderAmount(CalculateNonTaxableAmountDTO dto);
CalculateNonTaxableAmountDTO:
public class CalculateNonTaxableAmountDTO {
private Long orderNum;
private BigDecimal nonTaxableAmount;
public Long getOrderNum() {
return orderNum;
}
public void setOrderNum(Long orderNum) {
this.orderNum = orderNum;
}
public BigDecimal getNonTaxableAmount() {
return nonTaxableAmount;
}
public void setNonTaxableAmount(BigDecimal nonTaxableAmount) {
this.nonTaxableAmount = nonTaxableAmount;
}
}
上面的效果很好,但我想做的是这样的:
映射器 XML: 请注意缺少的 parameterType 属性。
<update id="calculateNonTaxableOrderAmount"
statementType="CALLABLE" >
{ call sp_calc_non_taxable_order_amount(
#{orderNum,jdbcType=INTEGER,mode=IN},
#{nonTaxableAmount,jdbcType=DECIMAL,mode=OUT} )
}
</update>
DAO接口上的方法:
public void calculateNonTaxableOrderAmount(
@Param("orderNum") Long orderNum,
@Param("nonTaxableAmount") BigDecimal nonTaxableAmount);
DAO 方法的调用代码类似于:
BigDecimal nonTaxAmount = new BigDecimal(-1).setScale(2);
orderHeaderDAO.calculateNonTaxableOrderAmount(new Long(11111), nonTaxAmount);
System.out.println("nonTaxAmount = " + nonTaxAmount);
代码成功执行,但 nonTaxAmount 从未更新。 println 打印出 -1。
任何帮助或指导将不胜感激。
【问题讨论】: