话不多说,先上一段代码:

最近改bug或者做需求的时候遇到相当糟心的代码,我们和数据库打交道采用的是ibatis框架,截图的代码是有问题的,可以看到bean 的变量 **discount_unit_price** 是通过基本类型声明的,这样会有个问题,基本类型的变量如果没有赋值,默认会有一个初始值,这边 **discount_unit_price** 如果没有赋值的情况下,默认是0。而 **updateExchangeOrder()** 里面虽然在构造的 **ExchangeOrder** 对象的时候,虽然业务上看起来是没有对 **discount_unit_price** 做更新的处理,xml 里面也做了非空判断,一切看起来好像都没有问题, 但是忽略了 **discount_unit_price** 基本类型初始值为0的情况,导致每次调用这个方法,都会将原有的 **discount_unit_price** 的值覆盖为0。 ````````````xml discount_unit_price=#discount_unit_price#, ````````````   一般和持久层打交道的时候,我们都会使用基本类型的包装类,一直以来我在开发的过程当中也都是这么做,但是没仔细考虑为什么不使用基本类型,或者说对使用基本类型的弊端的感悟没这么深。   除了持久层Bean对象禁止用基本类型外,一般业务层也不建议用基本类型来声明对象,道理和同上,那么时候用基本类型比较合适呢?个人认为在使用枚举类,并且需要写死声明变量的时候用比较合适。如以下代码: ````````````java public enum ExchangeType {
refund(0, "退货"),
resend(1,"补发"),
exchange(2,"换货"),
other(3,"其他"),
refundOnly(4,"仅退款");

/** 状态值 */
public final int type;
/** 标签 */
public final String label;

}