Hibernate注解式开发
迪丽瓦拉
2024-04-26 11:52:42
0

注:本文仅记录注解式开发的方法,HIbernate基本配置和基本使用见文章一,注解式关联映射开发见文章二。
文章一:Hibernate基本使用
文章二:Hibernate多表的关联关系、懒加载

目录:

  • 一、注解式开发的优点:
  • 二、基本注解的使用:
  • 三、多表关联关系:
    • 1.一对一单向关联:
    • 2.一对一双向关联:
    • 3.一对多(多对一)双向关联:
    • 4.多对多双向关联:

一、注解式开发的优点:

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多对多关联中关联的表

1.一对一单向关联:

班级表和班长表,班级表中有班长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;
}

2.一对一双向关联:

班级表和班长表,班级表中有班长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;
}

3.一对多(多对一)双向关联:

学校表和学院表,学院表中有学校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;
}

4.多对多双向关联:

学生表和选课表,多对多关联中还应有一张中间表。

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;
}

相关内容