📜  Hibernate-映射类型(1)

📅  最后修改于: 2023-12-03 15:15:31.678000             🧑  作者: Mango

Hibernate-映射类型

在Hibernate中,映射类型(Mapping Type)是用来把Java中的数据类型映射到数据库中的数据类型的。Hibernate提供了许多内置的映射类型以适应不同的需求,同时也支持用户自定义映射类型。

内置映射类型
基本类型映射类型

以下是Hibernate中基本类型和对应的映射类型:

| Java 类型 | SQL 类型 | 映射类型 | | --- | --- | --- | | boolean | BIT | org.hibernate.type.BooleanType | | byte, Byte | TINYINT | org.hibernate.type.ByteType | | short, Short | SMALLINT | org.hibernate.type.ShortType | | int, Integer | INTEGER | org.hibernate.type.IntegerType | | long, Long | BIGINT | org.hibernate.type.LongType | | float, Float | FLOAT | org.hibernate.type.FloatType | | double, Double | DOUBLE | org.hibernate.type.DoubleType | | char, Character | CHAR | org.hibernate.type.CharacterType | | java.lang.String | VARCHAR | org.hibernate.type.StringType | | java.math.BigDecimal | NUMERIC | org.hibernate.type.BigDecimalType | | java.util.Date, java.sql.Date, java.sql.Time, java.sql.Timestamp | TIMESTAMP | org.hibernate.type.TimestampType, org.hibernate.type.DateType, org.hibernate.type.TimeType |

枚举类型映射类型

Hibernate 5.0+支持映射Java 1.5或更高版本中的枚举类型,以下是Hibernate中枚举类型和对应的映射类型:

| Java 类型 | SQL 类型 | 映射类型 | | --- | --- | --- | | java.lang.Enum | VARCHAR | org.hibernate.type.EnumType |

注意:Hibernate映射枚举类型时,需要用EnumType设置枚举类的类名,如:

@Entity
public class User {
    @Enumerated(EnumType.STRING)
    private Gender gender; // 枚举类型
    // ...
}
高级类型映射类型

Hibernate支持很多高级类型,如:

  • 大文本类型(CLOB):org.hibernate.type.ClobType
  • 二进制大对象类型(BLOB):org.hibernate.type.BinaryType
  • Serializable类型:org.hibernate.type.SerializableType
自定义映射类型

当Hibernate内置的映射类型不能满足需求时,可以自定义映射类型。自定义映射类型需要实现org.hibernate.usertype.UserType接口,通常需要实现以下方法:

  • nullSafeGet():将数据库中的数据解析成Java对象,并返回。
  • nullSafeSet():将Java对象中的值设置到PreparedStatement中。
  • deepCopy():返回一个Java对象的副本。
  • equals():判断两个Java对象是否相同。
  • returnedClass():返回Java对象类型。

自定义映射类型可以在实体类的映射文件中使用,如:

<property name="userTypeField" type="com.example.UserType" />
总结

Hibernate的映射类型是将Java对象与数据库数据类型一一对应的重要组成部分。通过内置的映射类型,可以轻松地将Java对象传输到数据库中。当内置映射类型无法满足需求时,也可以通过自定义映射类型,实现将Java对象完美映射到数据库中。