Hibernate的核心功能是根据数据库到实体类的映射,自动从数据库绑定数据到实体类。

这使我们操作实体类(Java对象)就能对数据库进行增、删、查、改,而不用调用JDBC API使数据操作变得简单而不繁琐。本文主要总结了实体类的各种属性类型到数据库表的映射以及各种关联关系的映射。

1. 基本类型的映射

在业务中常见的基本类型有Integer、Short、Float、Double、Long、Boolean、String。

1.1 Integer

实体类的属性用Integer可以映射数据的int类型的字段,模型为:

1
2
@Column(name = "integer_number")
private Integer integerNumber;

1.2 Short

实体类的属性用Short可以映射数据的tinyint类型的字段,模型为:

1
2
@Column(name = "short_num")
private Short shortNum;

1.3 Float

实体类的属性用Float可以映射数据的float类型的字段,模型为:

1
2
@Column(name = "float_num")
private Float floatNum;

1.3 Double

实体类的属性用Double可以映射数据的double类型的字段,模型为:

1
2
@Column(name = "Double_num")
private Double doubleNum;

1.4 Long

实体类的属性用Long可以映射数据的bigint类型的字段,模型为:

1
2
@Column(name = "long_num")
private Long longNum;

1.5 Boolean

实体类的属性用Boolean可以映射数据的tinyint类型的字段,模型为:

1
2
@Column(name = "boolean_type")
private Boolean booleanType;

1.6 String

实体类的属性用String可以映射数据的varchar或者char类型的字段,模型为:

1
2
@Column(name = "string_type")
private String stringType;

2. 枚举类型的映射

实体类的属性的枚举类型,在数据库表中可以被映射为int,或者tinyint类型的字段,具体视枚举数量的多少决定,模型为:

1
2
3
@Enumerated(EnumType.ORDINAL)
@Column(name = "sex")
private Sex sex;

其中Sex为枚举类型:

1
2
3
4
5
public enum Sex {
MALE(0,"MALE"),
FEMALE(1,"FEMALE"),
UNKNOWN(2,"UNKNOWN");
}

3. BigDecimal

实体类的属性的BigDecimal类型,在数据库表中可以被映射为decimal,可以指定精度,模型为:

1
2
@Column(name = "charge")
private BigDecimal charge;

4. 时间相关

常用的时间相关的类型是Datetime和Instant,在数据库表中可以被映射为datetime,注意如果不指定datetime的精度,则默认四舍五入到秒,而Instant的默认精度是毫秒,实际值和存储值可能出现1秒的误差。模型为:

1
2
@Column(name = "instant_date")
private Instant instantDate;