hibernate实现ORM(对象关系映射)
hibernate基本文件(xml非注解)
1)*.java映射类
2)*.hbm.xml 映射文件
3).cfg.xml数据库配置文件(+驱动加载.properties文件)*
hibernate有7种映射关系
(1)单向一对一
1)Annotation方法
exp:
@Entity
public class Author {
private int id;
private String name;
@Id
public int getId() {
return id;
}
....set(),get()方法
@Entity
public class Books {
private int id;
private String bookname;
private Author author;
@Id
public int getId() {
return id;
}
....
@OneToOne
public String getAuthor(){
return author;
}
2)xml方法
采用的标签映射,并指定unique为true,限制多的一端唯一
(2)单向多对一
1)Annotation方法
雷同单向一对一,在多的一端注解@ManyToOne
2)xml方法
<many-to-one name="group" column="groupid"/>
(3)单向一对多
1)Annotation方法
@Entity
@Table(name="Group_table")
public class Group {
private int id;
private String GroupName;
private Set<User> users = new HashSet<User>();
@Id
public int getId() {
return id;
}
...
@OneToMany
public Set<User> getUsers() {
return users;
}
@Entity
@Table(name = "user_table")
public class User {
private int id;
private String name;
@Id
public int getId() {
return id;
}
...
2)xml方法
<set name="User">
<key column="GroupId"/>
<one-to-many class="csc.hfz.Model.User"/>
</set>
注:单向一对多,在多的一方前提是不知道一端是哪个,维护与Group关系Groupid为NULL
(4)单向的多对多
单向多对多就需要第三张表的建立关系
1)Annotation方法
参考单向一对多关联,不多介绍
2)xml方法,User边添加
<set name="teacher" table="t_user_Group">
<key column="user_id"/>
<many-to-many class="csc.hfz.Model.Group" column="Group_id"/>
</set>
(5)双向一对一
1)Annotation方法
exp:
@Entity
@Table(name="User_T")
public class User {
private int id;
private String name;
private Group group;
@OneToOne
@JoinColumn(name="group_id",unique=true) //name自定义关联外键的列名
public Group getGroup() {
return group;
}
@Id
public int getId() {
return id;
}
...
@Entity
@Table(name="Group_T")
public class Group {
private int id;
private String GroupName;
private User user;
public String getGroupName() {
return GroupName;
}
@Id
public int getId() {
return id;
}
@OneToOne(mappedBy="group")
//mappedBy是指定User中的group作为关联外键,否则User和group都会出现外键
public User getUser() {
return user;
}
...
注意:此处的group指的是与User中getGroup的group对应
2)xml方法
<one-to-one name="user"property-ref="group"/>
注意:一对一唯一外键关联双向采用标签映射,必须指定标签中的property-ref属性为关系字段的名称
(6)双向多对多
1)Annotation方法
2)xml方法,Student边添加(设2个类为Student,Teacher)
<set name="teacher" table="t_Student_Teacher">
<key column="Student_id"/>
<many-to-many class="csc.hfz.Model.Teacher" column="Teacher_id"/>
</set>
Teacher边添加
<set name="Student" table="t_Student_Teacher">
<key column="Teacher_id"/>
<many-to-many class="csc.hfz.Model.Student" column="Student_id"/>
</set>
**注意:
- 生成的中间表名称必须一样
- 生成的中间表中的字段必须一样
**
(7)双向一对多
1)Annotation方法
一对多双向关联的映射方式:
在一的一端的集合上采用标签,在多的一端加入一个外键
在多的一端采用标签
2)xml方法,Student边添加(设2个类为Student,Teacher)
Group添加:
<set name="students"inverse="true">
<key column="groupid"/>
<one-to-many class="csc.hfz.Model.Student"/>
</set>
Student:
<many-to-one name="group" column="studentid"/>
注意:inverse属性…..:
inverse属性默认是false,若为false,则关联由自己控制,若为true,则关联
由对方控制。