在 Java 开发手册中有这一条:

我们知道基本类型和包装类型有很多不同点:

  • 封装类型可以调用各种方法,而基本类型没有
  • 封装类型声明字段之后可以不设置默认值,而基本类型需要初始化默认值。比如 int 默认值为0,boolean 默认值为 false。

为什么要有这种规定

一般 dao 层会有固定的增删改查方法,分别是:

  • selectByPrimaryKey
  • updateByPrimaryKey
  • insertSelective
  • updateByPrimaryKeySelective

selectByPrimaryKey

在调用查询方法 selectByPrimaryKey,字段Integer a 本来是 null,但是因为设置成了 int 类型,Java 会自动初始化默认值,结果显示默认值 0。查询结果和数据库不匹配。本来要插入null,反而插入了0,导致数据添加错误。

updateByPrimaryKeySelective

在调用更新的方法,这里是调用 updateByPrimaryKeySelective 选择性更新字段,有值才更新,没有值就不更新,更新字段 b,但是由于字段 a 是 int 类型,在创建对象时,a 设置成了默认值0,误将为 null 的 a 设置成了0。insertSelective 方法也是同理。

参数传输

在springmvc接收数据,或者使用 RPC 方法传输数据,参数本来是没有赋值,但是 SpringMvc 或者 RPC 都会初始化默认值,但是传输的数据和需要传输的数据值不一致。

总结

所有的 POJO 必须设置封装类型,这是因为数据为 null 的情况下,基本类型会有默认值,无论是在添加、修改和查询的时候,都会导致数据和实际要修改的数据不一致。这一点还是需要多多注意。

参考

如果觉得文章对你有帮助的话,请点个推荐吧!

阿里Java规范:【强制】所有的 POJO 类属性必须使用包装数据类型的更多相关文章

  1. pojo类对应的就是数据库中的表,pojo类属性类型一定要用包装类Integer等

    pojo类对应的就是数据库中的表,pojo类属性类型一定要用包装类Integer等 pojo类对应的就是数据库中的表,pojo类属性类型一定要用包装类Integer等 pojo类对应的就是数据库中的表 ...

  2. IDEA阿里Java规范插件的安装

    本文参考自阿飞博客:http://www.cnblogs.com/aflyun/p/7668306.html 官方使用教程:https://zhuanlan.zhihu.com/p/30191998? ...

  3. IDEA安装IDEA阿里Java规范插件

    插件安装方式有两种: 1.通过在线方式安装,搜索后找到,点击Install安装即可: 2.去官网plugins下载对应插件离线包,地址:https://plugins.jetbrains.com/pl ...

  4. Java基础语法04面向对象上-类-属性-方法-可变参数-重载-递归-对象数组

    类 面向对象是一种思想,一般指将事务的属性与方法抽出总结为模板(类/class),处理事务时通过类创建/new出对象由对象的功能/方法去完成所要计算处理的事情. 面向过程:POP:以过程,步骤为主,考 ...

  5. 【工具】获取pojo类属性,并写入表格

    1.添加依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <g ...

  6. 阿里Java编程规范 学习笔记

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  7. 为什么阿里巴巴开发手册中强制要求 POJO 类使用包装类型?NPE问题防范

    封面:学校内的秋天 背景:写这个的原因,也是我这两天凑巧看到的,虽然我一直有 alibaba Java 开发手册,也看过不少次,但是一直没有注意过这个问题 属于那种看过,但又没完全看过 一起来看看吧冲 ...

  8. 点评阿里JAVA手册之编程规约(OOP 规约 、集合处理 、并发处理 、其他)

    下载原版阿里JAVA开发手册  [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文难度系数为三星(★★★) 本文为第二篇 第一篇 点评阿里JAVA手 ...

  9. 阿里Java开发手冊之编程规约

    对于程序猿来说,编程规范能够养成良好的编程习惯,提高代码质量,减少沟通成本.就在2月9号,阿里出了一份Java开发手冊(正式版),分为编程规约.异常日志.MySQL规约,project规约.安全规约五 ...

随机推荐

  1. 用相对路径有时居然是这样,,加上<%=basePath%>

    用相对路径有时居然是这样,所以还是用绝对路径好点,加上<%=basePath%> 比如create页面的action为ssh/pages/User/create,那么create页面的上的 ...

  2. 分布式系统一致性算法(Raft)

    过去, Paxos一直是分布式协议的标准,但是Paxos难于理解,更难以实现,Google的分布式锁系统Chubby作为Paxos实现曾经遭遇到很多坑. 来自Stanford的新的分布式协议研究称为R ...

  3. Error: Not found: 'package:json_annotation/json_annotation.dart'

    问题原因 json_annotation版本不对 修改json_annotation版本号 当前可用版本号 json_annotation: ^2.2.0

  4. JAVA获取请求的IP地址

    private static final String[] ADDR_HEADER = { "X-Forwarded-For", "Proxy-Client-IP&quo ...

  5. 利用shiro反序列化注入冰蝎内存马

    利用shiro反序列化注入冰蝎内存马 文章首发先知社区:https://xz.aliyun.com/t/10696 一.shiro反序列化注入内存马 1)tomcat filter内存马 先来看一个普 ...

  6. HDFS源码解析:教你用HDFS客户端写数据

    摘要:终于开始了这个很感兴趣但是一直觉得困难重重的源码解析工作,也算是一个好的开端. 本文分享自华为云社区<hdfs源码解析之客户端写数据>,作者: dayu_dls. 在我们客户端写数据 ...

  7. ☕【难点攻克技术系列】「海量数据计算系列」如何使用BitMap在海量数据中对相应的进行去重、查找和排序

    BitMap(位图)的介绍 BitMap从字面的意思,很多人认为是位图,其实准确的来说,翻译成基于位的映射,其中数据库中有一种索引就叫做位图索引. 在具有性能优化的数据结构中,大家使用最多的就是has ...

  8. Android物联网应用程序开发(智慧园区)—— 园区监控系统界面

    效果图: 布局代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...

  9. Java的发展简史

    Java是由Sun Microsystems公司(简称Sun公司)于1995 年 5 月推出的 Java程序设计语言和Java平台的总称.Java语言是一种可以撰写跨平台应用软件的面向对象的程序设计语 ...

  10. C# 绘制印章

    最近有个.net core的项目要绘制印章功能,一个公司印章,一个个人印章,于是抽了点时间自己写了一个,现在分享出来 using System; using System.Collections.Ge ...