第4章 Hibernate应用 课堂
- 格式:ppt
- 大小:3.08 MB
- 文档页数:118
Hibernate部分学习笔记讲师:梁建全liangjq@目录Hibernate部分学习笔记 (1)Day01 (5)一、Hibernate基本概念 (5)1、Hibernate是什么,有什么作用和好处 (5)2、Hibernate实现原理 (5)3、Hibernate框架主要结构 (5)二、Hibernate基本应用 (6)1、Hibernate使用步骤 (6)三、映射类型 (9)1、Hibernate映射类型主要有以下几种: (9)四、主键生成 (10)Day02 (11)一、Hibernate框架的基本特性 (11)1、Hibernate一级缓存 (11)A.一级缓存的特点 (11)B.一级缓存的好处 (11)C.使用建议 (11)2、Hibernate对象持久性 (13)3、Hibernate延迟加载 (14)A.针对于以下方法,Hibernate默认使用延迟加载机制: (14)B.Session的get和load方法区别: (14)C.延迟实现原理 (15)D.Hibernate框架如何动态生成一个代理类 (15)E.使用建议 (15)二、Hibernate综合练习 (15)前期案例:任务列表示例重构(采用Struts2+Hibernate) (15)A.Hibernate前期准备 (15)B.为了更好使用一级缓存,采用ThreadLocal封装Session (16)C.采用Hibernate重构ProjectDAO (17)D.为了支持延迟加载API,采用拦截器实现OpenSessionInView模式 (18)Day03 (20)一、什么是关联映射,有什么好处 (20)二、一对多关联映射 (20)示例:d_order和d_item存在一对多的业务关系 (20)一对多关系映射的实现步骤: (20)三、多对一关联映射 (21)多对一关系映射实现步骤: (21)四、关联操作 (22)1、关联查询 (22)2、利用lazy属性控制延迟加载 (22)3、级联操作(采用关系级联方式进行添加、删除、更新操作) (22)A.在关联属性映射部分添加cascade属性,可以指定以下属性 (22)B.Inverse属性的作用 (22)C.级联添加 (23)D.级联删除 (23)Day04 (24)一、如何使用Myeclipse生成映射文件和实体类? (24)1、如何根据DB生成实体类和映射文件 (24)A.利用Myeclipse追加Hibernate框架步骤: (24)B.利用Myeclipse根据表生成实体类和映射文件 (26)二、多对多关系映射 (29)三、继承关系映射 (30)1、继承关系映射(1) (30)A.首先将Book继承自Product类 (30)B.修改Book.hbm.xml描述信息 (30)2、继承关系映射(2)---理解 (31)Day05 (33)一、其他映射 (33)1、List集合映射 (33)2、formula子查询映射 (33)3、Component组件映射 (34)4、联合主键映射 (35)案例:采用联合主键映射+组件映射对t_person表进行操作。
使用hibernate步骤
1.创建表
2.创建web项目导入hibernate支持jar 数据库驱动包jstl支持jar
包
3.编写实体类(即hibernate即将操作的对象)
4.和实体类在同一目录下编写映射文件xxx.hbm.xml
5.在src根目录下添加hibernate 配置文件hibernate.cfg.xml 含数据
库连接信息urldriver_class username password dialectshow_sqlformat_sql最重要的是<mapping>指定要加载的映射文件。
6.在测试类读取配置文件获取session 通过session操作实体类对象
实现CRUD操作[注没有SQL语句操作的是实体类对象或实体类属性]
Hibernate 核心API Configuration SessionFactory Session Transaction Query Criteria?
进阶思考下?如何简化代码?将重复使用的方法提取出来。
使用mysql数据库创建数据库名myhouse
练习1已知数据库表结构如下图所示,使用hibernate实现添加纪录修改记录删除记录以及查询单条记录功能。
练习2在上题基础上在util包下添加工具类HibernateUtil添加获取Session方法和SessionFactory发发
添加com.chinasofti.dao定义接口并在此接口下定义CRUD方法
添加com.chinasofti.dao.impl实现接口类并实现对应方法
新建测试类调用CRUD四个方法
有如下表结构
先创建表再依次创建相对应的实体类。
实验4Hibernate基础应用1 实验目的:1 通过实例开发,熟练掌握Hibernate的开发过程。
2 掌握Hibernate对数据表的映射及相关配置文件的配置。
2 实验内容:对学生表student表进行增、删、改、查操作。
熟练掌握Hibernate持久层对数据表的映射关系。
3 实验程序package org.test;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.Transaction;import org.vo.Student;import org.util.HibernateSessionFactory;public class Test {public Session session;public static void main(String[] args) {Test ht=new Test(); //创建类对象ht.getCurrentSession(); //获得session对象ht.saveUser(); //插入一条记录System.out.println("增加一条记录后结果======");ht.queryUser(); //查看数据库结果ht.updateUser(); //修改该条记录System.out.println("修改该条记录后结果======");ht.queryUser(); //查看数据库结果ht.deleteUser(); //删除该条记录System.out.println("删除该条记录后结果======");ht.queryUser(); //查看数据库结果ht.closeSession(); //关闭session }//获得session方法public void getCurrentSession(){//调用HibernateSessionFactory 的getSession 方法创建Session 对象session = HibernateSessionFactory.getSession();}//关闭session方法public void closeSession(){if(session!=null){HibernateSessionFactory.closeSession(); // 关闭Session }}//插入一条记录方法public void saveUser(){Transaction t1 = session.beginTransaction();// 创建事务对象Student user = new Student();user.setId(4);user.setSno("1205");user.setName("赵雪飞");user.setClass_("17341");user.setGrade(85);session.save(user);mit(); // 提交事务}//修改这条记录方法public void updateUser(){Transaction t2 = session.beginTransaction();//get方法的第二个参数是表中主键id的实际值Student user = (Student)session.get(Student.class,new Integer(2));user.setGrade(80);session.update(user);mit();}//查询数据库结果方法public void queryUser(){try{Query query = session.createQuery("from Student");List list=query.list();for(int i=0;i<list.size();i++){Student user = (Student)list.get(i);System.out.println(user.getId());System.out.println(user.getSno());System.out.println(user.getName());System.out.println(user.getClass_());System.out.println(user.getGrade());}}catch(Exception e){e.printStackTrace();}}//删除该条记录方法public void deleteUser(){Transaction t3 = session.beginTransaction();Student user = (Student)session.get(Student.class, new Integer(3));session.delete(user);mit();}}4 实验结果5 实验小结学了Struts框架,主要是用于图形界面的交互,今天学了Hibernate框架,主要是用于对数据库的操作,感觉功能很强大,两者如果结合,想必作用应该非常很轻大。
第四章网上商城项目持久层设计和实现(第3/3部分)1.1.1构建对DAO组件进行单元测试的环境1、对基于Hibernate框架技术开发的组件的单元测试要点(1)测试主要涉及如下两个方面的测试1)对其hibernate.cfg.xml文件以及各个O/R Mapping 的*.xml文件2)基于hibernate的DAO组件中的各个数据访问功能的方法进行测试。
(2)在测试用例类中利用Configuration类中的configure()方法来定位被测试系统的hibernate.cfg.xml文件,从而获得SessionFactory,最后获得Session。
注意:有关对基于Hibernate框架技术开发的组件的单元测试具体详细的内容,请读者阅读本书的第九章“对基于Hibernate的DAO单元测试”的内容。
2、在当前项目所在的工作空间中添加一个测试项目(1)名称为TestWebShopProject选择【文件】菜单中的【新建】菜单,再选择【项目】菜单项,并选择【新建Java项目】菜单项后,将出现下面的图4.32所示的对话框。
在项目的名称输入框中输入项目名称为TestWebShopProject,请见下面的图4.32所示。
图4.32 添加测试项目TestWebShopProject的对话框(2)将前面的被测试项目引入到本测试项目中右击本测试项目名称,选择【属性】菜单,将出现下面的图4.33的项目属性对话框。
在“项目”标签页中点击【添加】按钮,最后在弹出的项目选择的对话框中选择前面的被测试项目的名称WebShopProject。
请参考下面的图4.33所示。
图4.33 将被测试项目引入到本测试项目中的对话框3、在本测试项目中添加JUnit的*.jar包文件右击本测试项目名称,选择【属性】菜单,将出现下面的图4.34的项目属性对话框。
在“库”标签页中点击【添加外部JAR(X)】按钮。
在本机器的磁盘中选择JUnit的系统包文件junit.jar(本项目采用JUnit 3.8版,当然本书假定读者熟悉单元测试以及JUnit单元测试的应用)。