阿里Java规范:【强制】所有的 POJO 类属性必须使用包装数据类型
在 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 类属性必须使用包装数据类型的更多相关文章
- pojo类对应的就是数据库中的表,pojo类属性类型一定要用包装类Integer等
pojo类对应的就是数据库中的表,pojo类属性类型一定要用包装类Integer等 pojo类对应的就是数据库中的表,pojo类属性类型一定要用包装类Integer等 pojo类对应的就是数据库中的表 ...
- IDEA阿里Java规范插件的安装
本文参考自阿飞博客:http://www.cnblogs.com/aflyun/p/7668306.html 官方使用教程:https://zhuanlan.zhihu.com/p/30191998? ...
- IDEA安装IDEA阿里Java规范插件
插件安装方式有两种: 1.通过在线方式安装,搜索后找到,点击Install安装即可: 2.去官网plugins下载对应插件离线包,地址:https://plugins.jetbrains.com/pl ...
- Java基础语法04面向对象上-类-属性-方法-可变参数-重载-递归-对象数组
类 面向对象是一种思想,一般指将事务的属性与方法抽出总结为模板(类/class),处理事务时通过类创建/new出对象由对象的功能/方法去完成所要计算处理的事情. 面向过程:POP:以过程,步骤为主,考 ...
- 【工具】获取pojo类属性,并写入表格
1.添加依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <g ...
- 阿里Java编程规范 学习笔记
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- 为什么阿里巴巴开发手册中强制要求 POJO 类使用包装类型?NPE问题防范
封面:学校内的秋天 背景:写这个的原因,也是我这两天凑巧看到的,虽然我一直有 alibaba Java 开发手册,也看过不少次,但是一直没有注意过这个问题 属于那种看过,但又没完全看过 一起来看看吧冲 ...
- 点评阿里JAVA手册之编程规约(OOP 规约 、集合处理 、并发处理 、其他)
下载原版阿里JAVA开发手册 [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文难度系数为三星(★★★) 本文为第二篇 第一篇 点评阿里JAVA手 ...
- 阿里Java开发手冊之编程规约
对于程序猿来说,编程规范能够养成良好的编程习惯,提高代码质量,减少沟通成本.就在2月9号,阿里出了一份Java开发手冊(正式版),分为编程规约.异常日志.MySQL规约,project规约.安全规约五 ...
随机推荐
- word里搜狗输入法出不来,可以按ctrl+空格键
word里搜狗输入法出不来,可以按ctrl+空格键
- 二、Uniapp+vue+腾讯IM+腾讯音视频开发仿微信的IM聊天APP,支持各类消息收发,音视频通话,附vue实现源码(已开源)-腾讯云后台配置TXIM
项目文章索引 1.项目引言 2.腾讯云后台配置TXIM 3.配置项目并实现IM登录 4.会话好友列表的实现 5.聊天输入框的实现 6.聊天界面容器的实现 7.聊天消息项的实现 8.聊天输入框扩展面板的 ...
- Mybatis-Plus一键生成代码
Mybatis-Plus一键生成代码 一.闲言碎语 闲来无事看了看了MP的官网看到一键生成的代码更新了! 整个Ui风格都变了,遂决定瞅一眼新的代码生成器 官网地址~~ 二.引入依赖 新的代码生成只有在 ...
- 【LeetCode】1071. Greatest Common Divisor of Strings 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力遍历 日期 题目地址:https://leetc ...
- 【LeetCode】375. Guess Number Higher or Lower II 解题报告(Python)
[LeetCode]375. Guess Number Higher or Lower II 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://f ...
- 1434 区间LCM
1434 区间LCM 基准时间限制:1 秒 空间限制:131072 KB 一个整数序列S的LCM(最小公倍数)是指最小的正整数X使得它是序列S中所有元素的倍数,那么LCM(S)=X. 例如,LCM(2 ...
- dart系列之:你的地盘你做主,使用Extension对类进行扩展
目录 简介 dart中extension的使用 API冲突 extention的实现 总结 简介 一般情况要扩展一个类,需要继承这个类,这是在大多数java或者其他面向对象语言中要做的事情. 但是有些 ...
- CS5211设计EDP转LVDSA转接屏|替代LT7211|DP转LVDS屏驱动 转接板
LT7211是一种用于虚拟现实/显示应用的高性能C/DP1.2至LVDS芯片. 对于DP1.2输入,LT7211可以配置为1.2.4车道,还支持车道交换功能.自适应均衡使其适用于长电缆应用,最大带宽可 ...
- IT6516功能兼容芯片|DP转VGA方案|CS5202替代兼容IT6516
台湾联阳T6516是一种高性能的DP显示端口到VGA转换器方案芯片.IT6516结合DisplayPort接收器和三重DAC,通过转换功能支持DisplayPort输入和VGA输出.内置Display ...
- Mybatis获取自增主键的值
pojo: public class User { private Integer id; private String name; private String pwd; setter和getter ...