前面的相关文章中,我们已经介绍了使用XML配置文件映射实体类及其各种类型的属性的相关知识。然而不论是时代的潮流还是臃肿繁杂的配置代码告诉我们,注解配置才是更人性化的设计,于是学习了基本的映射实体类的基本注解,此处做一点总结,后续文章将陆续更新使用注解的方式管理配置各种映射关联关系。本篇主要涉及以下内容:
使用最基本的注解映射一个实体类
使用注解映射属性
使用注解映射主键
其他特殊类型的属性映射
一、使用最基本的注解映射一个实体类
@Entity
@Table(name = "userInfo")
public class UserInfo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
//省略getter和setter方法
}
//在hibernate.cfg.xml中添加实体类
//这样hibernate就会根据配置文件去查找该实体类并做映射操作
这就是映射一个最简单的实体类所用到的最基本的注解。其中,
@Entity:指定当前被修饰的类是一个实体类,用于映射到数据库中的表。
@Table(name = "userInfo"):详细指定了该类映射到数据库中的哪张表,这里映射到userInfo表。
@Id:指定被修饰的属性将映射到数据表的主键列。
@GeneratedValue(strategy = GenerationType.IDENTITY):该注解指定了主键的生成策略,一般不单独出现,这里指定了主键自增的策略。
这里写图片描述
二、使用注解映射普通属性
对于实体类中属性的映射,一般我们使用@Column进行修饰。该注解有很多属性:
name:指定该属性映射到数据表中对应的名称
nullable:指定该属性映射的数据表中列是否可以为null,默认为true
unique:指定该属性映射到数据表中的列是否具有唯一约束
length:指定该属性映射到数据表中的列所能保存数据的最大长度,默认是255
默认情况下,我们不使用@Column修饰属性的时候,hibernate会自动以该属性的名称映射到数据表中的列。
我们也可以使用注解@Transient修饰属性,它指明了该属性不会被映射到数据表中某一列,而只是作为一个属性被定义在实体类中。例如:
@Entity
@Table(name = "userInfo")
public class UserInfo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@Transient
private int age;
//省略getter,setter方法
}
看看hibernate为我们生成的sql语句:
这里写图片描述
显然,我们age属性并没有被映射到userinfo表中。
对于枚举类型的属性,我们可以使用@Enumerated注解进行修饰。
在某些特殊情况下,有时我们的实体类属性会被定义为枚举类型,那么对于这种数据库中并无法对应的Java类型,该如何映射呢?Hibernate中提供@Enumerated注解来用于我们映射枚举类型,该注解提供一个value属性,该属性可以取两个值:
EnumType.STRING:该枚举类型的属性映射到数据表的字段的类型是字符串型
EnumType.OR