深入浅出Hibernate(二)多对一关系映射
学习Hibernate是为了更方便的操作数据库,在数据库中的关系模型中存在多对一的关系,比如下图所示的员工和部门之间的关系,那么这种关系在Hibernate中如何映射呢?让我用一个小Demo来详细讲解。
建立映射分为以下几步:
1.设计domain对象Department、Employee,代码如下:
package cn.itcast.hibernate.domain; public class Department { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
package cn.itcast.hibernate.domain; public class Employee { private int id; private String name; private Department depart; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Department getDepart() { return depart; } public void setDepart(Department depart) { this.depart = depart; } }
2.导入hibernate.jar和其依赖的包,jar包的下载地址在上面博客中已经提供,这里不再赘述。
3.编写Department.hbm.xml和Employee.hbm.xml映射文件,代码实现如下:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.itcast.hibernate.domain"> <class name="Department" table="Department"> <id name="id"> <generator class="native"/> </id> <property name="name"/> </class> </hibernate-mapping>
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="cn.itcast.hibernate.domain"> <class name="Employee" table="Employee"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <many-to-one name="depart" column="depart_id"/> </class> </hibernate-mapping>Employee.hbm.xml中的“many-to-one”部分是重点,通过它建立Department对象和Employee的关联关系。
4.编写hibernate.cfg.xml配置文件,代码实现如下:
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="show_sql">true</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/test</property> <property name="connection.username">root</property> <property name="connection.password"></property> <property name="hbm2ddl.auto">update</property> <mapping resource="com/entity/User.hbm.xml" /> <mapping resource="cn/itcast/hibernate/domain/Department.hbm.xml" /> <mapping resource="cn/itcast/hibernate/domain/Employee.hbm.xml" /> </session-factory> </hibernate-configuration>5.编写HibernateUtils类,主要用来完成Hibernate初始化和提供一个获得Session的方法,代码实现如下:
package com.entity; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public final class HibernateUtil { private static SessionFactory sessionFactory; private HibernateUtil(){ } static { //解析配置文件,完成Hibernate初始化 Configuration cfg=new Configuration(); cfg.configure(); //所有的信息在sessionFactory中都可以找到 sessionFactory=cfg.buildSessionFactory(); } public static SessionFactory getSesssionFactory(){ return sessionFactory; } public static Session getSession(){ return sessionFactory.openSession(); } }6.编写Main方法,通过操作Department类和Employee类,向数据库中写入数据,代码实现如下:
package com.entity; import org.hibernate.Session; import org.hibernate.Transaction; import cn.itcast.hibernate.domain.Department; import cn.itcast.hibernate.domain.Employee; public class Many2One { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub add(); } static Department add() { Session s = null; Transaction tx = null; try { Department depart = new Department(); depart.setName("depart name"); Employee emp = new Employee(); emp.setDepart(depart); emp.setName("emp name"); s = HibernateUtil.getSession(); tx = s.beginTransaction(); s.save(depart); s.save(emp); tx.commit(); return depart; } finally { if (s != null) s.close(); } } }让我们查看一下数据表的变化,效果图如下所示:
通过上述方法,我们就可以轻松完成多对一关系从关系模型到对象模型的映射,完美的体现了ORM的思想。
希望我的讲解能帮助大家学习Hibernate。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。