至今,小菜用java快两年了,有些事,也该有个总结。

基本类型和包装类型的概念在本文不作赘述。

如果这两种类型直接使用,倒没什么值得讨论的,无非就是自动装箱拆箱,java可以让你感觉不到他们的存在,但如果我们在数据库映射实体(下文简称bo,即business object)中使用,就得注意了!

比如有一个评定表,里边有个评分字段,在写bo时,定义评分属性,是用int还是Integer呢?

假如用Integer,在做数据插入时,先实例化一个bo,此时bo中的Integer类型字段,默认是null值,如果我们一不留神忘了给它一个初始值0,那么插入到数据库中的值也是null,再查询出来,当然也是null。

试想,作为评分而言,下限也就是0分,怎么可能是null?于情说不通;读者平时可能不太注意,以下代码会抛出空指针异常:

 Integer i = null;

 if(i == 0){   

 }

为啥?因为java会对i进行自动拆箱,null怎么拆,当然会空指针了,于理说不通。

既然于情于理都不通,看来我们只能用基本类型int,而int恰好解决了上述问题,因为int是基本类型,天生就有初始值0。

有些时候,我们会直接把bo放在controller层,用来封装参数,客户端提交的参数,直接用一个bo来接受,就不用反复定义一堆变量,而且方便插入到数据库。

那么问题来了,如果我们的bo中是用基本类型int定义的属性,那么天生就会有默认值0,就算客户端不提交这个参数,也会有值,这样就无法区分值0是客户端提交的,还是默认的。

小菜以为,解决这个问题也不难,最简单的方法就是把0看作非法值,或者空值。如果检查到某个值为0,就认为没有提交该参数,或者提交的参数非法。

当然,不能一概而论,一棒子打死所有的0。在经典的设计中,有个概念叫软删除,就是加个字段(比如:status)标记一下,0表示该条记录正常,1表示已删除。这里依然可以用0,因为这是对内的参数,作为系统内部运作使用,不涉及与客户的交互。

最新文章

  1. Android的学习第六章(布局一LinearLayout)
  2. PAT 1030. 完美数列(25)
  3. CSS样式之语法
  4. POJ 2379 ACM Rank Table(排序)
  5. 如何用chrome修改js代码,跳过网站等待时间
  6. BZOJ_1022_[SHOI2008]_小约翰的游戏John_(博弈论_反Nim游戏)
  7. ServletContext1
  8. ST官方翻译的中文应用笔记汇总
  9. 基于visual Studio2013解决C语言竞赛题之1033数字交换
  10. C#构造函数、操作符重载以及自定义类型转换
  11. 对Spring IOC的理解(转)
  12. [USACO08JAN]haybale猜测Haybale Guessing
  13. JVM中判断对象是否存活的方法
  14. 第七节:Trigger(SimpleTrigger、CronTrigger)哑火(MisFire)策略 :
  15. (三)ajax请求不同源之cors跨域
  16. 2017 Pig-0.16.0安装
  17. CentOS6.5使用rsync远程同步
  18. 创建spark_读取数据
  19. C语言——<计算>_较大两个数相乘
  20. Python基础灬补充(循环、格式化输出)

热门文章

  1. Intelij IDEA 2016.3安装mybatis插件并激活教程
  2. linux搞大头,bang bang bang
  3. Android中如何查看so崩溃的log
  4. 年月日 生日 js插件
  5. sql server 分布式查询 和 主从服务器搭建
  6. mvc之文件下载
  7. [转]LibreOffice-SDK 开发实战:嵌入MFC-View 和 C# Winform
  8. 启动tomcat时遇到的问题
  9. CPU frequency and voltage scaling code in the Linux(TM) kernel
  10. iptables之LOG目标 被拦截包分析