MyBits 映射MySQL数据库YEAR类型Java实体类型选取

情景

最近在开发的时候遇到需要使用MySQL存储年份,发现MySQL有YEAR类型可以存储年份,YEAR有2位(最好使用4位)和4位格式的年。 默认是4位。如果实际应用只保存年份,那么用1bytes 保存 YEAR 类型完全可以。不但能够节约存储空间,还能提高表的操作效率。于是我也在数据库数据库添加了一个YEAR类型用来存取年份。

具体操作

数据库添加字段

  1. alter table mytable ADD COLUMN `year` YEAR DEFAULT '0000' COMMENT '年份' AFTER `type`;

通过Maven插件之mybatis-generator(mybatis自动生成实体代码的插件)自动生成实体类,自动生成的java对象year字段的类型转化为Java的Date类型,通过java代码插入时报错,debug发现year字段插入的Date类型的数据为Sun Aug 11 12:05:36 CST 2019 ,而数据库只需要2019,导致插入报错。
找到原因了,那么我们修改下,把year 在java实体类的类型改为int,重新插入数据,这次不报错了,直接插入的时候不会选择year字段,这就更尴尬了,准备Google一下,看下广大网友有没有类似的情况,结果没找到一篇文章,无奈只能自己看了,看mapper文件发现,数据库其他要是使用int类型的数据,定了的实体类型为Integer,而我定义为int,会不会是这个问题,于是我修改为Integer,再次测试,终于成功,万幸!

拓展 MySQL时间所有的类型

类型 占用空间 日期格式 最小值 最大值 零值表示
DATETIME 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 9999-12-31 23:59:59 0000-00-00 00:00:00
TIMESTAMP 4 bytes YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 2038-01-19 03:14:07 0000-00-00 00:00:00
DATE 4 bytes YYYY-MM-DD 1000-01-01 9999-12-31 0000-00-00
TIME 3 bytes HH:MM:SS 00:00:00 23:59:59 00:00:00
YEAR 1 bytes YYYY 1901 2155 0