1
我想從Java使用MyBatis & Spring調用MySQL存儲過程。我是否需要使用POJO來做到這一點?是否可以在不使用POJO的情況下從MyBatis調用MySQL存儲過程?
我使用以下版本:
- 的Java 1.6
- 的MyBatis 3.2.2
- 春/ MyBatis的
- 1.2春天3.2.3
- MySQL 5.1中
以下代碼片段代碼確實工作。
XML映射:
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;
}
}
以上的偉大工程,但我想這樣做是
<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接口中的方法像這樣:
映射程序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。
任何幫助,或指導,將不勝感激。
啊,這是有道理的,MyBatis正在創建一個新的對象實例。謝謝。 – CyclingBloke