JAVAEE Hibernate关系映射实验剖析.docx
《JAVAEE Hibernate关系映射实验剖析.docx》由会员分享,可在线阅读,更多相关《JAVAEE Hibernate关系映射实验剖析.docx(15页珍藏版)》请在冰豆网上搜索。
![JAVAEE Hibernate关系映射实验剖析.docx](https://file1.bdocx.com/fileroot1/2022-12/8/9235a19e-1045-4eb4-92db-255433a09cc4/9235a19e-1045-4eb4-92db-255433a09cc41.gif)
JAVAEEHibernate关系映射实验剖析
实验六:
Hibernate关系映射
实验名称
Hibernate关系映射
实验步骤
一、一对一共享主键方式的关系映射
1.创建Javaproject,命名为lab6
2.建立数据库及表结构(特别注意:
在创建数据库时选择字符集,例如为gbk,校对规则为gbk_chinese_ci。
否则不能显示中文字符)
登录表:
login
列名
描述
数据类型
可空
默认值
说明
ID
ID号
int(4)
否
无
主键
USERNAME
登录账号
varchar(20)
是
无
PASSWORD
登录密码
varchar(20)
是
无
用户详细信息表:
detail
列名
描述
数据类型
可空
默认值
说明
ID
ID号
int(4)
否
无
主键,自增
TRUENAME
真实姓名
varchar(8)
是
无
EMAIL
电子邮件
varchar(50)
是
无
3.在MyEclipse中创建对MySQL的连接
1)切换到“MyEclipseDatabaseExplorer”视图,新建MySQL数据库连接驱动。
启动MyEclipse,选择【Window】→【OpenPerspective】→【MyEclipseDatabaseExplorer】菜单项,打开MyEclipseDatabase浏览器,右击菜单,如下图所示,选择【New…】菜单项,出现如图所示的对话框,编辑数据库连接驱动。
Drivertemplate:
MySQLConnector/J
Drivername:
com.mysql.jdbc.Driver
(在url中添加characterEncoding参数,否则在数据库中不能显示中文)
ConnectionURL:
jdbc:
mysql:
//localhost:
3306/javaee?
characterEncoding=gbk
注:
javaee要修改成你所使用的数据库名称
Username:
root
Password:
JDBC驱动存放位置:
c盘lib文件夹下
2)测试连接:
在MyEclipseDatabase浏览器中,右击刚才创建的MyConn数据库连接,选择“Openconnection…”菜单项,打开名为“MyConn”的数据连接,如图所示:
4.添加Hibernate开发能力
右击项目名lab6,选择【MyEclipse】→【AddHibernateCapabilites】菜单项,出现如下图所示的对话框,选择Hibernate框架应用版本及所需要的类库。
单击【Next】按钮,进入如下图所示界面。
创建Hibernate配置文件hibernate.cfg.xml,将该文件放在src文件夹下,后面会详细介绍该文件内容。
这里先说明添加Hibernate开发功能的步骤。
单击【Next】按钮,进入如下图所示界面,指定Hibernate数据库连接细节。
由于在前面已经配置一个名为MyConn的数据库连接,所以这里只需要选择DBDriver为“MyConn”即可。
单击【Next】按钮,出现如下图所示界面。
Hibernate中有一个与数据库打交道重要的类Session。
而这个类是由工厂SessionFactory创建的。
这个界面询问是否需要创建SessionFactory类。
如果需要创建,还需要指定创建的位置和类名。
这些接口都会在后面详细介绍。
单击【Finish】按钮,完成Hibernate的配置。
5.生成数据库表对应的Java类对象和映射文件
在MyEclispse下创建一个名为“org.model”的包,这个包将用来存放与数据库表对应的Java类POJO。
打开MyEclipseDatabaseExplorer视图。
打开前面创建的MyConn数据连接,选择【XSCJ】→【TABLE】菜单项,右击相应表(登录表和用户信息表),选择【HibernateReverseEngineering…】菜单项,如下图所示,将启动HibernateReverseEngineering向导,该向导用于完成从已有的数据库表生成对应的Java类和相关映像文件的配置工作。
首先,选择生成的Java类和映像文件所在的位置,如图所示。
单击【Next】按钮,进入如图所示的界面,选择主键生成策略。
下面列举需要修改的代码,修改后的代码如下。
Detail.java
packageorg.model;
publicclassDetail{
…
privateStringemail;
privateLoginlogin;
//省略getter和setter方法及构造函数(反向工程自动生成的构造函数必须有否则操作数据库会报错)
}
Login.java
packageorg.model;
publicclassLogin{
…
privateStringpassword;
privateDetaildetail;
//省略getter和setter方法及构造函数
}
Login.hbm.xml
……
--name指定POJO类,table指定对应数据库的表-->
--name指定主键,type指定主键类型-->
--采用foreign标志生成器,直接采用外键的属性值-->
detail
Detail.hbm.xml
……
--name指定POJO类,table指定对应数据库的表-->
注意:
检查一下在hibernate.cfg.xml文件中是否已加入配置映射文件的语句
6.测试类Test.java
Test.java:
//此处省略main方法
……
Sessionsession=HibernateSessionFactory.getSession();
Transactionts=session.beginTransaction();//创建事务对象
Detaildetail=newDetail();
Loginlogin=newLogin();
login.setUsername("yanhong");
login.setPassword("123");
detail.setTruename("严红");
detail.setEmail("yanhong@");
login.setDetail(detail);
detail.setLogin(login);
session.save(detail);
mit();
HibernateSessionFactory.closeSession();
……
二、多对多的关系映射
1.建立数据库及表结构
学生表:
student
列名
描述
数据类型
可空
默认值
说明
ID
ID号
int
否
无
主键
SNUMBER
学号
varchar(10)
是
无
SNAME
姓名
varchar(10)
SAGE
年龄
int
是
无
课程表:
course
列名
描述
数据类型
可空
默认值
说明
ID
ID号
int
否
无
主键
CNUMBER
课程号
varchar(10)
是
无
CNAME
课程名
varchar(20)
是
无
学生选课表(连接表):
stu_cour
列名
描述
数据类型
可空
默认值
说明
SID
学生ID号
int
否
无
主键
CID
课程ID号
int
否
无
主键
3.生成数据库表对应的Java类对象和映射文件
在MyEclispse下创建一个名为“org.model”的包,这个包将用来存放与数据库表对应的Java类POJO。
打开MyEclipseDatabaseExplorer视图。
打开前面创建的MyConn数据连接,选择【XSCJ】→【TABLE】菜单项,右击相应表(学生表和课程信息表),选择【HibernateReverseEngineering…】菜单项,如下图所示,将启动HibernateReverseEngineering向导,该向导用于完成从已有的数据库表生成对应的Java类和相关映像文件的配置工作。
首先,选择生成的Java类和映像文件所在的位置,如图所示。
单击【Next】按钮,进入如图所示的界面,选择主键生成策略。
下面列举需要修改的代码,修改后的代码如下。
Student.java
packageorg.model;
importjava.util.HashSet;
importjava.util.Set;
publicclassStudentimplementsjava.io.Serializable{
…
privateintsage;
privateSetcourses=newHashSet();
//省略上述各属性的getter和setter方法及构造函数(反向工程自动生成的构造函数必须有否则操作数据库会报错)
}
Course.java
packageorg.model;
importjava.util.HashSet;
importjava.util.Set;
publicclassCourseimplementsjava.io.Serializable{
…
privateStringcname;
privateSetstus=newHashSet();
//省略上述各属性的getter和setter方法
}
Student.hbm.xml
……
……
Course.hbm.xml
……
……
注意:
检查一下在hibernate.cfg.xml文件中是否已加入配置映射文件的语句
6.测试类Test.java
Test.java:
//此处省略main方法
……
Sessionsession=HibernateSessionFactory.getSession();
Transactionts=session.beginTransaction();//创建事务对象
Coursecour1=newCourse();
Coursecour2=newCourse();
Coursecour3=newCourse();
cour1.setCnumber("101");
cour1.setCname("计算机基础");
cour2.setCnumber("102");
cour2.setCname("数据库原理");
cour3.setCnumber("103");
cour3.setCname("计算机原理");
Setcourses=newHashSet();
courses.add(cour1);
courses.add(cour2);
courses.add(cour3);
Studentstu=newStudent();
stu.setSnumber("081101");
stu.setSname("李方方");
stu.setSage(21);
stu.setCourses(courses);
session.save(stu);
mit();
HibernateSessionFactory.closeSession();
……
三、扩展实验:
自己完成多对一单向关联和一对多双向关联。