大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
我在网上也搜过很多,就是想知道在数据库中的建表语句的字段类型对应Java实体类中属性的类型是什么。
结果网上一套一套的说法不一,完全不一致,有没有一致点的,不会错的!看我,你就有。
于是我就无聊到用mybatis-generator
插件一一生成对应关系,插件根据数据库建表语句自动生成Java实体类对象。现在开发都是自动生成实体类,我这里也生成后记录一下。
给出数据库图形界面,方便大家理解我在做什么
sql
如下
CREATE TABLE `testtype` (
`int_type` int unsigned DEFAULT NULL,
`int_unsigned` int NOT NULL,
`bigint_unsigned20` bigint DEFAULT NULL,
`bigint_unsigned255` bigint DEFAULT NULL,
`big_int` bigint DEFAULT NULL,
`big_int_255` bigint DEFAULT NULL,
`varchar` varchar(255) DEFAULT NULL,
`bit` bit(20) DEFAULT NULL,
`bit_64` bit(64) DEFAULT NULL,
`tiny_int` tinyint DEFAULT NULL,
`tiny_int_unsigned` tinyint unsigned DEFAULT NULL,
`small_int` smallint DEFAULT NULL,
`small_int_unsigned` smallint DEFAULT NULL,
`binary` binary(255) DEFAULT NULL,
`blob` blob,
`char_utf8` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`char_utf8mb4` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`char_utf8gbk` char(255) CHARACTER SET gbk COLLATE gbk_chinese_ci DEFAULT NULL,
`date` date DEFAULT NULL,
`datetime` datetime DEFAULT NULL,
`timestamp` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`float_type` float DEFAULT NULL,
`float_unsigned` float unsigned DEFAULT NULL,
`decimal` decimal(10,0) DEFAULT NULL,
`numeric` decimal(10,0) DEFAULT NULL,
`double_type` double DEFAULT NULL,
`double_unsigned` double unsigned DEFAULT NULL,
`integer_type` int DEFAULT NULL,
`integer_unsigned` int unsigned DEFAULT NULL,
`text` text,
`time` time DEFAULT NULL,
`tinytext` tinytext,
`year` year DEFAULT NULL,
`enum_type` enum('1','red') CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
PRIMARY KEY (`int_unsigned`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
生成的Java
实体类对象如下(篇幅原因,我删掉自动生成的getter
和setter
):
public class testType {
private Integer intUnsigned;
private Integer intType;
private Long bigintUnsigned20;
private Long bigintUnsigned255;
private Long bigInt;
private Long bigInt255;
private String varchar;
private byte[] bit;
private byte[] bit64;
private Byte tinyInt;
private Byte tinyIntUnsigned;
private Short smallInt;
private Short smallIntUnsigned;
private String charUtf8;
private String charUtf8mb4;
private String charUtf8gbk;
private Date date;
private Date datetime;
private Date timestamp;
private Float floatType;
private Float floatUnsigned;
private Long decimal;
private Long numeric;
private Double doubleType;
private Double doubleUnsigned;
private Integer integerType;
private Integer integerUnsigned;
private Date time;
private String tinytext;
private Date year;
private String enumType;
}
表我给大家列出来了,帅的人已经点赞、关注、收藏一键三连了,谁偷看一下就溜走?
MySQL数据类型 | Java实体类属性类型 | 说明 |
---|---|---|
int | Integer | 不管是signed还是unsigned,Java实体类型都是Integer |
bigint | Long | 不管是bigint(xxx)括号多少位,不管signed还是unsigned,Java实体类型都是Long |
varchar | String | – |
bit | byte[] | – |
tinyint | Byte | 不管是signed还是unsigned,Java实体类型都是Byte,在java.lang包下 |
smallint | Short | 不管是signed还是unsigned,Java实体类型都是Short |
char | String | 不管char是gbk、utf8、utf8mb4等编码类型,Java实体类型都是String |
date | Date | java.util.Date |
datetime | Date | java.util.Date |
timestamp | Date | java.util.Date |
time | Date | java.util.Date |
float | Float | 不管是signed还是unsigned,Java实体类型都是Float |
decimal | Long | – |
numeric | Long | – |
double | Double | 不管是signed还是unsigned,Java实体类型都是Double |
tinytext | String | – |
text | String | – |
year | Date | java.util.Date |
enum | String | – |
有些类型插件没有自动转换过来,我就不列举,这里就列举常用的并且插件能转换过来的,这肯定是对的没错。
后续设计表规范内容:
1.从8.0.17版本开始,
TINYINT
,SMALLINT
,MEDIUMINT
,INT
,BIGINT
类型的显示宽度将失效。比如bigint(20)
,如果用navicat
直接保存长度20,最终在建表语句被保存为bigint
,长度会失效。
2.自增字段类型必须是整型而且必须是unsigned
,推荐int
或者bigint
,并且自增字段必须是主键或者主键的一部分,我个人写物理主键id一般就是bigint unsigned
。
3.手机号使用varchar(20)
,不要使用整数。
4.对于精确浮点型数据存储,需要使用decimal
,严禁使用float
、double
。
5.如无特殊需要,禁止开发人员使用blob
。
6.日期类型字段不能使用varchar
或者char
,只能使用date
、datetime
字段类型存放。
7.所有只需要精确到天的字段全部使用date
类型,而不应该使用timestamp
或者datetime
类型。
8.所有需要精确到时分秒的字段均使用datetime
,不要使用timestamp
类型。
9.不建议使用enum
、set
类型,使用tinyint
替代。
10.仅仅只有单个字符的字段用char(1)
,比如性别字段。
11.按照规范,每个列定义的时候必须加上comments
,我上面举例子偷懒了所以没写。
12.数据库的字符集只能选择utf8mb4
,如果需要导出,也需要显式选择utf8mb4
作为导出格式。
欢迎一键三连~
有问题请留言,大家一起探讨学习
———————-Talk is cheap, show me the code———————–
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/197626.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...