




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机科学与技术系实验报告第1页共7页第1页共2页Java企业级开发(J2EE)实验报告指导教师:王磊课程名称:Java企业级开发(J2EE)年级:12实验日期:2014-3-19姓名:xxx学号:03班级:2班实验名称:Hibernate持久层编程实验序号:实验六成员人数:1一、 实验目的及要求实验目的:1、理解orm框架;2、掌握Hibernate的本质(对JDBC进行了轻量级的封装)实验原理:1、Hibernate可以按照不同数据库,使用最优化的SQL语句处理不同的操作;2、引入Hibernate可以是工作人员角色细化;让程序员更关系业务流程;3、Hibernate使得分层更加清晰,耦合性更小,通用性更强。二、实验环境MicrosoftSQLServer2008,MyEclipse,Tomcat;三、实验内容及完成情况1、创建雇员数据库/**创建者:王磊*时间:*功能:建立雇员数据库,请在SSMS中直接运行*/createdatabaseEmployee--库名为Employeeon(name='Employee_data',filename='d:\javaEE使用的数据库\Employee_data.mdf',size=10mb)logon(name='Employee_log',filename='d:\javaEE使用的数据库\Employee_log.ldf',size=10mb)gouseEmployeegocreatetableEmployee--创建雇员表(idintprimarykey,--标签编号,主码empnamenvarchar(20)notnull,--雇员姓名可变字符串类型,长度emailnvarchar(50),hiredatedatenotnull)2、引入sql驱动包sqljdbc4.jar。3、引入hibernate包。4、创建com.wl.domain包。在这个包下面创建Employee类。5、编写Employee类代码。packagecom.wl.domain;publicclassEmployee{ privateIntegerid; privateStringname; privateStringemail; privatejava.util.Datehiredate; publicIntegergetId(){ returnid; } publicvoidsetId(Integerid){ this.id=id; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ =name; } publicStringgetEmail(){ returnemail; } publicvoidsetEmail(Stringemail){ this.email=email; } publicjava.util.DategetHiredate(){ returnhiredate; } publicvoidsetHiredate(java.util.Datehiredate){ this.hiredate=hiredate; }}6、在com.wl.domain包下面手工创建Employee.hmb.xml文档。(实际开发项目时,是自动生成的xml配置文件,但是建议初学者第一次手工编写xml文件,以便加深印象。)7、Employee.hmb.xml文档内容如下:<?xmlversion="1.0"encoding="utf-8"?><!--加入DTD约束文件,可以从驱动包里找到--><!DOCTYPEhibernate-mappingPUBLIC "-//Hibernate/HibernateMappingDTD3.0//EN" "/hibernate-mapping-3.0.dtd"><hibernate-mappingpackage="com.wl.domain"><classname="Employee"table="Employee"> <!--id用于指定主码--> <idname="id"column="id"type="java.lang.Integer"> <!--generator用于指定主码的生成策略--> <generatorclass="increment"> <paramname="id"></param> </generator> </id> <!--配置除了主码之外的其他属性--> <propertyname="name"type="java.lang.String"> <columnname="empname"not-null="false"/> </property> <propertyname="email"type="java.lang.String"> <columnname="email"not-null="true"/> </property> <propertyname="hiredate"type="java.util.Date"> <columnname="hiredate"not-null="false"/> </property></class></hibernate-mapping>8、在src下面编写hibernate.cfg.xml配置文件。9、hibernate.cfg.xml文档内容如下:<?xmlversion="1.0"encoding="utf-8"?><!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory> <propertyname="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property><propertyname="hibernate.connection.username">sa</property><propertyname="hibernate.connection.password">123456</property><propertyname="hibernate.connection.url">jdbc:sqlserver://localhost:1433;DatabaseName=Employee</property> <propertyname="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property> <propertyname="hibernate.show_sql">true</property><mappingresource="com/wl/domain/Employee.hbm.xml"/></session-factory></hibernate-configuration>10、创建com.wl.view包,在这个包下面编写测试主函数EmployeeTest.java。packagecom.wl.view;importjava.util.Date;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.Transaction;importorg.hibernate.cfg.*;importcom.wl.domain.Employee;publicclassEmployeeTest{ publicstaticvoidmain(String[]args){ //使用hibernate完成数据库的CRUD操作。 //1.创建configuration,该对象用于读取ibernate.cfg.xml,//并完成初始化工作 Configurationconfiguration=newConfiguration().configure("hibernate.cfg.xml"); //2.创建SessionFactory,会话工厂,是一个重量级的对象。一个项目中只能加载一次,最好使用单态模式。 SessionFactorysessionFactory=configuration.buildSessionFactory(); //3.创建会话session Sessionsession=sessionFactory.openSession(); //4.添加一条雇员信息 Employeeemployee=newEmployee(); //employee.setId(111);//此处要注意:创建数据库时,如果指定identity(1,1)自增长策略,则配置Employee.hmb.xml文件时,必须配置主码策略为native,或者indentity。//<!--generator用于指定主码的生成策略-->// <generatorclass="native">// <paramname="id"></param>// </generator> employee.setName("wl"); employee.setEmail("wl@126.com"); employee.setHiredate(newDate());//在hibernate中执行增加、删除和修改语句,必须使用事务。查询不需要。 //5.创建一个事务 Transactionransaction=session.beginTransaction(); //6.事务开始执行 transaction.begin(); session.save(employee); //7.提交事务 mit(); //8.一定要及时释放资源。 session.close(); }}11、在项目中运行主函数文件,观察运行结果。12、观察后台数据库变化。出现的问题及解决方案1、主码生成策略常见的有:(1)自动增长identity适用于MySQL、DB2、MSSQLServer,采用数据库生成的主键,用于为long、short、int类型生成唯一标识。(2)sequenceDB2、Oracle均支持的序列,用于为long、short或int生成唯一标识。(3)3、hilo使用一个高/低位算法生成的long、short或int类型的标识符,给定一个表和字段作为高位值的来源,默认的表是hibernate_unique_key,默认的字段是next_hi。它将id的产生源分成两部分,DB+内存,然后按照算法结合在一起产生id值,可以在很少的连接次数内产生多条记录,提高效率。(4)native会根据底层数据库的能力,从identity、sequence、hilo中选择一个,灵活性更强,但此时,如果选择sequence或者hilo,则所有的表的主键都会从Hibernate默认的sequence或者hilo表中取。并且,有的数据库对于默认情况主键生成测试的支持,效率并不是很高,对于oracle采用Sequence方式,对于MySQL和SQLServer采用identity(自增主键生成机制),native就是将主键的生成工作交由数据库完成,hibernate不管(很常用)。(5)seqhilosequence和hilo的结合,hilo的高位由sequence产生,所以也需要底层数据库的支持,通过hilo算法实现,但是主键历史保存在Sequence中,适用于支持Sequence的数据库,如Oracle(比较少用)。(6)increment这个是由Hibernate在内存中生成主键,每次增量为1,不依赖于底层的数据库,因此所有的数据库都可以使用,但问题也随之而来,由于是Hibernate生成的,所以只能有一个Hibernate应用进程访问数据库,否则就
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《Windows Server操作系统维护与管理项目教程》课件学习情境7
- 幼儿教育在线平台行业跨境出海项目商业计划书
- 放射工作人员证考试:放射防护(上)
- 长治市保安证考试试题及答案
- 怎么考交安c考试试题及答案
- 云南省建筑B证考试试题及答案
- 湘教版八年级地理(上册)期末试卷(附参考答案)
- 园艺公务员面试题及答案
- 育婴师笔试题目及答案
- 《动力电池及能量管理技术》课件-任务4 其他类型动力电池结构及应用
- 托管餐饮管理制度
- 语文课堂教学技能教程知到课后答案智慧树章节测试答案2025年春杭州师范大学
- 智研咨询发布:2025年中国爬壁检测机器人行业市场发展环境及前景研究报告
- 专题04说明文(二)重难点题型-给材料放位置段落互换(原卷版+解析)
- 2025年天津市河北区中考第一次模拟道德与法治试卷
- 2025年湖南长沙医疗健康投资集团有限公司招聘笔试参考题库含答案解析
- 电梯施工方案对重反绳轮
- 基于电磁感应原理的旋转设备转速精确测量技术研究
- 女装基础知识
- 职业培训机构组织架构及岗位职责分析
- 高考放假安全班会
评论
0/150
提交评论