全部
技术
PHP
MySQL
前端
Linux
JAVA
工具
纪念日计算器
邮记星
个人记账
笔记侠
历史上的今天
生日密码
生日书
生日密码
生日花语
博古通今
三十六计
鬼谷子
笑林广记
本草纲目
山海经
唐诗宋词
宋词300首
唐诗300首
退出
登录
注册
编辑文章
选择分类
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 |
保存文章