gpt4 book ai didi

mysql - 是否可以在不使用 POJO 的情况下从 MyBatis 调用 MySQL 存储过程?

转载 作者:行者123 更新时间:2023-11-29 06:42:28 25 4
gpt4 key购买 nike

我想使用 MyBatis 和 Spring 从 Java 调用 MySQL 存储过程。我需要使用 POJO 来做吗?

我正在使用以下版本:

  • Java 1.6
  • MyBatis 3.2.2
  • Spring /MyBatis
  • 1.2 Spring 3.2.3
  • MySQL 5.1

以下代码片段确实有效。

映射器 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接口(interface)上的方法:

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接口(interface)上的方法:

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 将 nonTaxableAmount 值设置为 BigDecimal 的新实例,并且您引用了原始 BigDecimal 实例。为了处理这个问题,我使用了某种数据持有者(在某种程度上类似于 jax-ws 数据持有者):

public class Holder<T> {
private T data;

public T getData() {
return data;
}

public void setData(T data) {
this.data= data;
}
}

MyBatis 配置(假设 nonTaxableAmount 是 Holder 的实例):

#{nonTaxableAmount.data,jdbcType=DECIMAL,mode=OUT}

关于mysql - 是否可以在不使用 POJO 的情况下从 MyBatis 调用 MySQL 存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20663925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com