注:本文仅记录注解式开发的方法,HIbernate基本配置和基本使用见文章一,注解式关联映射开发见文章二。
文章一:Hibernate基本使用
文章二:Hibernate多表的关联关系、懒加载
Hibernate支持XML式开发与注解式开发,前面我们已经学过XML开发,XML开发中我们需要为每个实体类创建XML映射文件,通过XML映射文件建立数据库表与JAVA实体类的映射关系。
而注解式开发通过在JAVA实体类中使用JPA注解来建立数据库表与JAVA实体类的映射关系,不必再为每个实体类编写XML文件。
注解 | 含义 |
---|---|
@Entity | 用在类上,将类与数据库表建立一一对应关系 |
@Id | 该注解下的属性对应数据库表的主键 |
@Column | 该注解为每个属性与数据库字段建立一一对应关系 |
@Basic | 主键使用@Id,非主键使用该注解 |
@Entity(name = "student")
public class Student {@Id@Column(name = "stuNo")private String stuNo;@Basic@Column(name = "stuName")private String stuName;@Basic@Column(name = "stuClass")private String stuClass;public String getStuNo() {return stuNo;}public void setStuNo(String stuNo) {this.stuNo = stuNo;}public String getStuName() {return stuName;}public void setStuName(String stuName) {this.stuName = stuName;}public String getStuClass() {return stuClass;}public void setStuClass(String stuClass) {this.stuClass = stuClass;}
}
这样就将Student类与student表建立了关系,通过操作Student对象就可以对student表进行增删查改操作了。(具体CRUD操作间文章一)
XML式的多表关联关系见文章二,这里我们看一下如何使用注解建立多表的关联关系。
注解 | 含义 |
---|---|
@OneToOne | 一对一关联 |
@OneToMany | 一对多关联 |
@ManyToOne | 多对一关联 |
@ManyToMany | 多对多关联 |
@JoinColumn | 外键 |
@JoinTable | 多对多关联中关联的表 |
班级表和班长表,班级表中有班长id字段。
@Entity(name = "clas")
public class Clas {@GeneratedValue(strategy = GenerationType.IDENTITY)@Id@Column(name = "clasNo")private String clasNo;@Basic@Column(name = "clasName")private String clasName;//班级表中有班长类的对象,并使用@OneToOne注解建立关联关系,使用@JoinColumn标明外键@OneToOne(cascade = CascadeType.ALL)@JoinColumn(name = "clasMonitorNo")private Monitor monitor;
}
@Entity(name = "monitor")
public class Monitor {@Id@Column(name = "monitorNo")private String monitorNo;@Basic@Column(name = "monitorName")private String monitorName;
}
班级表和班长表,班级表中有班长id字段,班长表中有班级id字段。
@Entity(name = "monitor")
public class Monitor {@Id@Column(name = "monitorNo")private String monitorNo;@Basic@Column(name = "monitorName")private String monitorName;//班长表中有班级类的对象,并使用@OneToOne注解建立关联关系,使用@JoinColumn标明外键@OneToOne(cascade = CascadeType.ALL)@JoinColumn(name = "monitorClassNo")private Clas clas;
}
@Entity(name = "clas")
public class Clas {@Id@Column(name = "clasNo")private String clasNo;@Basic@Column(name = "clasName")private String clasName;//班级表中有班长对象,使用mappedBy与班长类建立关联,形成双向关联 @OneToOne(mappedBy = "clas")private Monitor monitor;
}
学校表和学院表,学院表中有学校id字段。
@Entity(name = "shcool")
public class School {@Id@Column(name = "schoolNo")private String schoolNo;//学校表是一方,使用@OneToMany@OneToMany(mappedBy = "school")private List academys;
}
@Entity(name = "academy")
public class Academy {@GeneratedValue(strategy = GenerationType.IDENTITY)@Id@Column(name = "academyNo")private String academyNo;@Basic@Column(name = "academyName")private String academyName;//学院表是多方,使用@ManyToOne@ManyToOne@JoinColumn(name = "academySchoolNo")private School school;
}
学生表和选课表,多对多关联中还应有一张中间表。
public class Student{//JoinTable的name是中间表表名,joinColumns指定中间表中关联自己ID的字段,inverseJoinColumns表示中间表中关联对方ID的字段,joinColumn是列名@ManyToMany@JoinTable(name="sc",joinColumns={@JoinColumn(name="stuid")},inverseJoinColumns{@JoinColumn(name="cno")})private List courses;
}
public class Course implements Serializable { @ManyToMany(mappedBy="courses")private List students;
}
上一篇:【第四范式】真题-矩阵查数
下一篇:mac快速安装homebrew