实验10Hibernate综合.docx
- 文档编号:2730798
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:15
- 大小:19.22KB
实验10Hibernate综合.docx
《实验10Hibernate综合.docx》由会员分享,可在线阅读,更多相关《实验10Hibernate综合.docx(15页珍藏版)》请在冰点文库上搜索。
实验10Hibernate综合
浙江大学城市学院实验报告
课程名称数据库系统设计与开发
实验项目名称实验10Hibernate综合
实验成绩指导老师(签名)日期
一.实验目的和要求
1.了解Hibernate的基本工作原理;
2.理解Hibernate的配置。
3.掌握简单映射文件的编写
4.掌握基本的HQL语句的编写
二.实验内容、原理及实验结果与分析
已知表结构如下:
Tbl_class班级信息表
序号
列名
数据类型
长度
小数位
主键
字段说明
1
Class_id
int
4
0
√
班级编号
2
Class_Name
varchar
80
0
班级名称
Tbl_student学生信息表
序号
列名
数据类型
长度
小数位
主键
字段说明
1
Stu_no
Varchar
20
√
学号
2
Class_id
int
4
0
班级编号
3
Stu_Name
varchar
80
0
姓名
4
Stu_sex
Varchar
2
性别
1.请根据上述表结构编写建表sql语句并在数据库中执行
运行结果:
请提供建表sql语句
createtableTbl_class
(
Class_idintprimarykey,
Class_Namevarchar(80)
);
createtableTbl_student
(
Stu_novarchar(20)primarykey,
Class_idint,
Stu_Namevarchar(80),
Stu_sexvarchar
(2)
)
2.代码编写
1)建立一个新的java工程,完成Hibernate主配置文件的编写和HibernateUtil类的编写和测试
2)根据表结构建立班级和学生javabean,并编写hbm文件建立javabean和数据库表的映射,要求建立学生和班级之间的多对一关联(即在学生javabean中增加一个班级属性),在hibernate主配置文件中增加对该hbm文件的引用
3)通过HibernateUtil类进行测试,确保映射文件没有问题
4)建立Manager类,实现并测试如下方法。
(其中BeanClass为班级javabean,BeanStudent为学生javabean)
a)publicBeanClassaddClass(intclassId,StringclassName);添加班级,如果班级编号或班级编号已经被占用,则抛出异常
b)publicBeanClassloadClass(intclassId);提取班级基本信息。
c)publicvoidrenameClass(intclassId,StringclassName);修改班级名称,如果班级不存在则抛出异常,如果新的班级名称已经被其他班级占用,则抛出异常
d)publicvoiddeleteClass(intclassId);删除班级,如果班级下已经存在学生,则抛出异常
e)publicBeanStudentaddStudent(Stringsno,Stringname,intclassId);添加学生,如果对应的班级不存在则抛出异常,如果学生学号被占用,则抛出异常
f)publicBeanStudentloadStudent(Stringsno);提取学生信息
g)publicvoidchangeStudentClass(Stringsno,intnewClassId);设置学生班级,如果学生不存在或班级不存在则抛出异常
h)publicList
i)publicList
运行结果:
提供各方法的代码
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEhibernate-configurationPUBLIC
"-//Hibernate/HibernateConfigurationDTD3.0//EN"
"http:
//www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
--hibernate.connection.driver_class:
连接数据库的驱动-->
--hibernate.connection.username:
连接数据库的用户名-->
--hibernate.connection.password:
连接数据库的密码-->
--hibernate.connection.url:
连接数据库的地址,路径-->
mysql:
//localhost:
3306/student?
useUnicode=true&characterEncoding=utf-8&useSSL=false
--show_sql:
操作数据库时,会向控制台打印sql语句-->
--format_sql:
打印sql语句前,会将sql语句先格式化-->
--数据库方言配置org.hibernate.dialect.MySQLDialect(选择最短的)-->
--hibernate.connection.autocommit:
事务自动提交-->
--将Session与线程绑定=>只有配置了该配置,才能使用getCurrentSession-->
--引入ORM映射文件填写src之后的路径-->
--
--
DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN""
--标识一个类的xml映射,name为类名,table为表名-->
--主键的设置,generator标识主键生成方式,因为native便于数据库的移植所以.嘿嘿!
你懂的-->
--这里配了该类一个属性街道名称name属性字段,column,数据库对应列-->
--主键的设置,generator标识主键生成方式,因为native便于数据库的移植所以.嘿嘿!
你懂的-->
--这里配了该类一个属性街道名称name属性字段,column,数据库对应列-->
--
--这里配了该类一个属性街道名称name属性字段,column,数据库对应列-->
--这里配了该类一个属性街道名称name属性字段,column,数据库对应列-->
packagecontrol;
importjava.util.ArrayList;
importjava.util.List;
importmodel.BeanClass;
importmodel.BeanStudent;
importorg.hibernate.Session;
importorg.hibernate.SessionFactory;
importorg.hibernate.Transaction;
importorg.hibernate.cfg.Configuration;
publicclassManager{
privatestaticSessionFactorysessionFactory=newConfiguration().configure().buildSessionFactory();
publicstaticSessiongetSession()
{
Sessionsession=sessionFactory.openSession();
returnsession;
}
publicBeanClassaddClass(intclassId,StringclassName)//加班级,如果班级编号或班级编号已经被占用,则抛出异常
{
Sessionsession=getSession();
BeanClassresult=null;
if(session.get(BeanClass.class,classId)!
=null)
{
try{
thrownewException("班级编号已经被占用");
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
else
{
Transactiontx=session.beginTransaction();
result=newBeanClass();
result.setClassid(classId);
result.setClassName(className);
session.save(result);
mit();
session.close();
}
returnresult;
}
publicBeanClassloadClass(intclassId)//提取班级基本信息。
{
Sessionsession=getSession();
BeanClassresult=(BeanClass)session.get(BeanClass.class,classId);
returnresult;
}
publicvoidrenameClass(intclassId,StringclassName)//修改班级名称,如果班级不存在则抛出异常,如果新的班级名称已经被其他班级占用,则抛出异常
{
Sessionsession=getSession();
BeanClassresult=null;
if(session.get(BeanClass.class,classId)==null)
{
try{
thrownewException("班级编号不存在");
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
else
{
Transactiontx=session.beginTransaction();
result=newBeanClass();
result=(BeanClass)session.get(BeanClass.class,classId);
result.setClassName(className);//这种就能修改了。
mit();
session.close();
}
}
publicvoiddeleteClass(intclassId)//删除班级,如果班级下已经存在学生,则抛出异常
{
Sessionsession=getSession();
BeanClassresult=null;
List
a=session.createQuery("fromBeanStudentwhereClassid='"+classId+"'").list();
Booleanb=a.isEmpty();
if(b==false)
{
try{
thrownewException("该班级还有学生存在");
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
else
{
Transactiontx=session.beginTransaction();
result=newBeanClass();
result=(BeanClass)session.get(BeanClass.class,classId);
session.delete(result);
mit();
session.close();
}
}
publicBeanStudentaddStudent(Stringsno,Stringname,intclassId)//添加学生,如果对应的班级不存在则抛出异常,如果学生学号被占用,则抛出异常
{
Sessionsession=getSession();
BeanStudentresult=null;
if(session.get(BeanStudent.class,sno)!
=null)
{
try{
thrownewException("学生编号已经被占用");
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
elseif(session.get(BeanClass.class,classId)==null)
{
try{
thrownewException("班级不存在");
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
else
{
Transactiontx=session.beginTransaction();
result=newBeanStudent();
result.setStuno(sno);
result.setStuName(name);
BeanClassc=newBeanClass();
c.setClassid(classId);
result.setStuClass(c);
session.save(result);
mit();
session.close();
}
returnresult;
}
publicBeanStudentloadStudent(Stringsno)//提取学生信息
{
Sessionsession=getSession();
BeanStudentresult=(BeanStudent)session.get(BeanStudent.class,sno);
returnresult;
}
publicvoidchangeStudentClass(Stringsno,intnewClassId)//设置学生班级,如果学生不存在或班级不存在则抛出异常
{
Sessionsession=getSession();
BeanStudentresult=null;
if(session.get(BeanStudent.class,sno)==null)
{
try{
thrownewException("学生编号不存在");
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
elseif(session.get(BeanClass.class,newClassId)==null)
{
try{
thrownewException("班级不存在");
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
else
{
Transactiontx=session.beginTransaction();
result=newBeanStudent();
result=(BeanStudent)session.get(BeanStudent.class,sno);
BeanClassc=newBeanClass();
c.setClassid(newClassId);
result.setStuClass(c);
mit();
session.close();
}
}
publicList
{
Sessionsession=getSession();
List
List
a=session.createQuery("fromBeanStudent").list();
for(BeanStudentb:
a)
{
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验10 Hibernate综合 实验 10 Hibernate 综合