说到关系,在这个世界无处不在,我们必须以某个关系的节点存在在这个世界网中。比如父子关系,师生关系,上下属关系甚至是危险关系。数据也是一样的,它的存在必为某其他节点做准备。
Hibernate有七种映射关联,方向分为单向或双向,主要根据需求分析多和一的关联,分别为:
1、单向1-1
2、单向N-1
3、单向1-N
4、单向N-N
5、双向1-N
6、双向N-N
7、双向1-1
在学习这七种映射关联之前,首先要了解基本映射的一些知识和必备条件。
一、必备实体类,以*.java命名。
如Student.java文件
1 public class Student { 2 private int id; 3 private String name; 4 public int getId() { 5 return id; 6 } 7 public void setId(int id) { 8 this.id = id; 9 } 10 public String getName() { 11 return name; 12 } 13 public void setName(String name) { 14 this.name = name; 15 } 16 17 }
二、必备配置文件,以*.hbm.xml命名。
了解hibernate.cfg.xml配置文件:
1、文档开头引入dtd文件,用来约束xml的命名为其制定了一套标准(提供了一套标签,好吧我承认这种理解有点土)。
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
2、配置数据库以及映射类的地址映射信息。
1 <hibernate-configuration> 2 <session-factory> 3 <!-- 数据库配置 --> 4 <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 5 <property name="hibernate.connection.url">jdbc:mysql://localhost:3307/hibernate_one2many</property> 6 <property name="hibernate.connection.username">root</property> 7 <property name="hibernate.connection.password">123456</property> 8 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 9 <property name="hibernate.show_sql">true</property> 10 11 <!-- 映射类的地址映射信息 --> 12 <mapping resource="com/juyahong/hibernate/Student.hbm.xml"/> 13 <mapping resource="com/juyahong/hibernate/Classes.hbm.xml"/> 14 </session-factory> 15 </hibernate-configuration>
三、映射文件,以*.hbm.xml命名。
如:Student.hbm.xml
通常我们的实体类可以映射成表,采用<class>标签映射。比如:
1 <hibernate-mapping package="com.juyahong.hibernate"> 2 <class name="Student" table="t_student"> 3 <id name="id"> 4 <generator class="native"/> 5 </id> 6 <property name="name" length="30"/> 7 </class> 8 </hibernate-mapping>
如上面代码可知,实体类中的普通属性即不包括集合、自定义类和数组的属性,映射成了表字段,采用<property>标签映射。需要注意的是实体类的命名或属性不能和数据库的关键字重复,否则会出错,之前做高校平台-基础系统的时候就出现了这个问题。可以通过table="**" 或 column="**"来重命名。
有了以上的必备条件后,之后的博客就开始以学生管理系统为例分析七种的映射关联。