1、JAVA EE Hibernate关系映射实验剖析实验六:Hibernate关系映射实验名称Hibernate关系映射实验步骤一、一对一共享主键方式的关系映射1. 创建Java project,命名为 lab62. 建立数据库及表结构(特别注意:在创建数据库时选择字符集,例如为gbk,校对规则为gbk_chinese_ci。否则不能显示中文字符)登录表:login列名描述数据类型可空默认值说明IDID号int(4)否无主键USERNAME登录账号varchar(20)是无PASSWORD登录密码varchar(20)是无用户详细信息表:detail列名描述数据类型可空默认值说明IDID号int
2、(4)否无主键,自增TRUENAME真实姓名varchar(8)是无EMAIL电子邮件varchar(50)是无3在MyEclipse中创建对MySQL的连接1)切换到“MyEclipse Database Explorer”视图,新建MySQL数据库连接驱动。启动MyEclipse,选择【Window】【Open Perspective】【MyEclipse Database Explorer】菜单项,打开MyEclipse Database浏览器,右击菜单,如下图所示,选择【New】菜单项,出现如图所示的对话框,编辑数据库连接驱动。Driver template:MySQL Connect
3、or/JDriver name:com.mysql.jdbc.Driver(在url中添加characterEncoding参数,否则在数据库中不能显示中文)Connection URL:jdbc:mysql:/localhost:3306/javaee?characterEncoding=gbk注:javaee要修改成你所使用的数据库名称User name:rootPassword:JDBC驱动存放位置:c盘lib文件夹下2)测试连接:在MyEclipse Database浏览器中,右击刚才创建的MyConn数据库连接,选择“Open connection”菜单项,打开名为“MyConn”的
4、数据连接,如图所示: 4. 添加Hibernate开发能力右击项目名lab6,选择【MyEclipse】【Add Hibernate Capabilites】菜单项,出现如下图所示的对话框,选择Hibernate框架应用版本及所需要的类库。单击【Next】按钮,进入如下图所示界面。创建Hibernate配置文件hibernate.cfg.xml,将该文件放在src文件夹下,后面会详细介绍该文件内容。这里先说明添加Hibernate开发功能的步骤。单击【Next】按钮,进入如下图所示界面,指定Hibernate数据库连接细节。由于在前面已经配置一个名为MyConn的数据库连接,所以这里只需要选择
5、DB Driver为“MyConn”即可。单击【Next】按钮,出现如下图所示界面。Hibernate中有一个与数据库打交道重要的类Session。而这个类是由工厂SessionFactory创建的。这个界面询问是否需要创建SessionFactory类。如果需要创建,还需要指定创建的位置和类名。这些接口都会在后面详细介绍。单击【Finish】按钮,完成Hibernate的配置。5. 生成数据库表对应的Java类对象和映射文件在MyEclispse下创建一个名为“org.model”的包,这个包将用来存放与数据库表对应的Java类POJO。打开MyEclipse Database Explor
6、er视图。打开前面创建的MyConn数据连接,选择【XSCJ】【TABLE】菜单项,右击相应表(登录表和用户信息表),选择【Hibernate Reverse Engineering】菜单项,如下图所示,将启动Hibernate Reverse Engineering向导,该向导用于完成从已有的数据库表生成对应的Java类和相关映像文件的配置工作。首先,选择生成的Java类和映像文件所在的位置,如图所示。单击【Next】按钮,进入如图所示的界面,选择主键生成策略。 下面列举需要修改的代码,修改后的代码如下。Detail.javapackage org.model;public class De
7、tail private String email; private Login login; / 省略getter和setter方法及构造函数(反向工程自动生成的构造函数必须有否则操作数据库会报错)Login.javapackage org.model;public class Login private String password; private Detail detail; / 省略getter和setter方法及构造函数Login.hbm.xml detail Detail.hbm.xml 注意:检查一下在hibernate.cfg.xml文件中是否已加入配置映射文件的语句6.
8、测试类Test.javaTest.java:/此处省略main方法Session session=HibernateSessionFactory.getSession();Transaction ts=session.beginTransaction(); / 创建事务对象Detail detail=new Detail();Login login=new Login();login.setUsername(yanhong);login.setPassword(123);detail.setTruename(严红);detail.setEmail(yanhong);login.setDetai
9、l(detail);detail.setLogin(login);session.save(detail);mit();HibernateSessionFactory.closeSession(); 二、多对多的关系映射1.建立数据库及表结构学生表:student列名描述数据类型可空默认值说明IDID号int否无主键SNUMBER学号varchar(10)是无SNAME姓名varchar(10)SAGE年龄int是无课程表:course列名描述数据类型可空默认值说明ID ID号int 否无主键CNUMBER 课程号varchar(10) 是无CNAME 课程名varchar(20) 是无学生选
10、课表(连接表):stu_cour列名描述数据类型可空默认值说明SID 学生ID号int 否无主键CID 课程ID号int 否无主键3生成数据库表对应的Java类对象和映射文件在MyEclispse下创建一个名为“org.model”的包,这个包将用来存放与数据库表对应的Java类POJO。打开MyEclipse Database Explorer视图。打开前面创建的MyConn数据连接,选择【XSCJ】【TABLE】菜单项,右击相应表(学生表和课程信息表),选择【Hibernate Reverse Engineering】菜单项,如下图所示,将启动Hibernate Reverse Engin
11、eering向导,该向导用于完成从已有的数据库表生成对应的Java类和相关映像文件的配置工作。首先,选择生成的Java类和映像文件所在的位置,如图所示。单击【Next】按钮,进入如图所示的界面,选择主键生成策略。 下面列举需要修改的代码,修改后的代码如下。Student.javapackage org.model;import java.util.HashSet;import java.util.Set;public class Student implements java.io.Serializable private int sage; private Set courses=new H
12、ashSet(); /省略上述各属性的getter和setter方法及构造函数(反向工程自动生成的构造函数必须有否则操作数据库会报错)Course.javapackage org.model;import java.util.HashSet;import java.util.Set;public class Course implements java.io.Serializable private String cname; private Set stus=new HashSet(); /省略上述各属性的getter和setter方法Student.hbm.xml Course.hbm.x
13、ml 注意:检查一下在hibernate.cfg.xml文件中是否已加入配置映射文件的语句6. 测试类Test.javaTest.java:/此处省略main方法Session session=HibernateSessionFactory.getSession();Transaction ts=session.beginTransaction(); / 创建事务对象Course cour1=new Course();Course cour2=new Course();Course cour3=new Course();cour1.setCnumber(101);cour1.setCname(
14、计算机基础);cour2.setCnumber(102);cour2.setCname(数据库原理);cour3.setCnumber(103);cour3.setCname(计算机原理);Set courses=new HashSet();courses.add(cour1);courses.add(cour2);courses.add(cour3);Student stu=new Student();stu.setSnumber(081101);stu.setSname(李方方);stu.setSage(21);stu.setCourses(courses);session.save(stu);mit();HibernateSessionFactory.closeSession(); 三、扩展实验:自己完成多对一单向关联和一对多双向关联。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1