版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lmy86263/article/details/70948433
本文使用的数据库测试环境为:
- MySQL:Windows 10x64 5.7.12-log
- SQL Server:Windows 10x64 SQL Server 2012
- Oracle:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
由于工程需要支持多种数据库,自然而然就想到使用Hibernate框架,但是不同的数据库提供的数据类型是不同的,Hibernate内置了针对不同数据库数据类型的映射策略。使用下面的实体类进行映射测试:
@Entity(name = "user")
@Table(name = "user")
public class User implements Serializable {
private static final long serialVersionUID = 8849870114127659929L;
@Id
private Long id;
@Column
private String name;
@Column
@Lob
private String comment;
@Column
private Integer age;
@Temporal(TemporalType.DATE)
private Date day;
@Temporal(TemporalType.TIME)
private Date time;
@Temporal(TemporalType.TIMESTAMP)
private Date mark;
private Boolean male;
private Double tall;
private Float size;
}
下面是针对Java基本类型的映射总结:
Java类型 | MySQL | SQL Server | Oracle |
---|---|---|---|
String | varchar(255) | varchar(255) | VARCHAR2(30) |
String(@Lob) | longtext | varchar(MAX) | CLOB(4000) |
Integer | int(11) | int | NUMBER(10) |
Long | bigint(20) | bigint | NUMBER(19) |
Double | double | float | FLOAT(126) |
Float | float | float | FLOAT(126) |
Boolean | bit(1) | bit | NUMBER(1) |
Date(TemporalType.DATE) | date | date | DATE(7) |
Date(TemporalType.TIME) | time | time(7) | DATE(7) |
Date(TemporalType.TIMESTAMP) | datetime | datetime2(7) | TIMESTAMP(6) |