Java开发手册中有这样一篇文章:我们知道基本类型和wrapper类型有很多区别:wrapper类型可以调用各种方法,而wrapper类型基本类型不需要在封装类型的声明字段后设置默认值,但基本类型需要初始化默认值。例如int的默认值为0,boolean的默认值为false。为什么要有这样的规定呢?一般dao层都会有固定的增删改查方法,分别是:selectByPrimaryKeyupdateByPrimaryKeyinsertSelectiveupdateByPrimaryKeySelectiveselectByPrimaryKey调用查询方法selectByPrimaryKey,字段Integera原本为null,但由于设置为int类型,Java会自动初始化默认值,结果显示默认值0。查询结果与数据库不匹配。本来插入的是null,结果反而插入了0,导致添加数据出错。updateByPrimaryKeySelective是调用update方法,这里是调用updateByPrimaryKeySelective选择性更新字段,有值就更新,没有值就不更新,b字段就更新,但是因为字段a是int类型,在创建对象时,a被设置为默认值0,a被错误设置为0表示null。insertSelective方法也是如此。参数传输在springmvc中接收数据,或者使用RPC方式传输数据。参数没有赋值,但是SpringMvc或者RPC会初始化默认值,但是传输的数据和要传输的数据值不一致。综上所述,所有的POJO都必须设置封装类型。这是因为当数据为空时,基本类型会有一个默认值。无论是新增、修改还是查询,数据都会和实际修改的数据不一致。这一点还是需要多加注意的。参考Java开发手册(嵩山版).pdf如果觉得文章对您有帮助,请点个赞!
