立刻有
全部
技术
PHP
MySQL
前端
Linux
JAVA
退出
编辑文章
选择分类
PHP
MySQL
前端
Linux
Java
工具
选择专栏
设计模式
java基础
Angular学习
Java面试题
描述:
MyBits 映射MySQL YEAR类型Java类型选取翻车现场
封面图上传 :
+
点击上传图片
MyBits 映射MySQL数据库YEAR类型Java实体类型选取 #### 情景 最近在开发的时候遇到需要使用MySQL存储年份,发现MySQL有YEAR类型可以存储年份,**YEAR有2位(最好使用4位)和4位格式的年。 默认是4位。如果实际应用只保存年份,那么用1bytes 保存 YEAR 类型完全可以。不但能够节约存储空间,还能提高表的操作效率。**于是我也在数据库数据库添加了一个YEAR类型用来存取年份。 #### 具体操作 数据库添加字段 ``` 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 |
保存文章