hibernate笔记总结_sdh.doc

上传人:hw****26 文档编号:3551397 上传时间:2019-06-04 格式:DOC 页数:39 大小:458.27KB
下载 相关 举报
hibernate笔记总结_sdh.doc_第1页
第1页 / 共39页
hibernate笔记总结_sdh.doc_第2页
第2页 / 共39页
hibernate笔记总结_sdh.doc_第3页
第3页 / 共39页
hibernate笔记总结_sdh.doc_第4页
第4页 / 共39页
hibernate笔记总结_sdh.doc_第5页
第5页 / 共39页
点击查看更多>>
资源描述

1、欢迎下载韩顺平老师的 PHP 视频教程 ,详情查看 http:/ hibernate 是什么?1. hibernate 是一个框架(framework)2. hibernate 是一个 orm 框架 orm (object relation mapping) 对象关系映射 框架o object - 业务层(只对对象操作)r relation- 关系数据库m mapping 对象关系映射文件3. hibernate 处于我们项目的持久层位置(正因为如此,所以有人又把 hibernate 称为 持久层框架)4. hibernate 实际上就是对 jdbc 进行了轻量级的封装.5. hibernat

2、e 的基础还是我们 java 反射机制 除了 hiberante 这个 orm 框架,还有一些:apache ojb / toplink / ibatis / ejb cmpApache OJB () Cayenne () Jaxor () Hibernate () iBatis () jRelationalFramework () mirage () SMYLE () TopLink () 把对象持久化: 把对象的信息保存到数据库或者是文件 .总结: hibernate 是对 jdbc 进行轻量级封装的 orm 框架,充当项目的持久层. 为什么需要 hibernate? 快如入门案例:hib

3、erante 可以用在 j2se 项目,也可以用在 j2ee (web 项目中 )struts 是 web 框架,所以用在 web 项目我们使用手动配置 hibernate 方式开发一个 hibernate 项目,完成 crud 操作 。欢迎下载韩顺平老师的 PHP 视频教程 ,详情查看 http:/开发流程1. 创建一个项目2. 画出一个简单项目框架示意图3. 引入 hibernate 开发包 (从网上下载 google hibernate http:/www.hibernate.org),完后我们4. 开发 hibernate 有三种方法(开发顺序)我们使用第二种开发项目创建 employ

4、e 表.create table employee(id number primary key,name varchar2(64) not null,email varchar2(64) not null,hiredate date not null)创建一个序列,将来用于主键的自增长 :-创建一个序列create sequence emp_seqstart with 1increment by 1minvalue 1nomaxvaluenocyclenocache5. 开发 domain 对象和对象关系映射文件对象关系映射文件: 作用是用于指定 domain 对象和表的映射关系. ,该文件的

5、取名有规范:domain 对象.hbm.xml, 一般我们放在 和 domain 对象同一个文件夹下(包下)我们的 Employee.hbml.xml 配置文件 :emp_seq欢迎下载韩顺平老师的 PHP 视频教程 ,详情查看 http:/6. 手动配置我们的 hibernate.cfg.xml 文件,该文件用于配置 连接的数据库的类型,driver,用户名,密码 ,url .同时管理 对象关系映射文件 ,该文件的名称,我们一般不修改.hibernate.cfg.xml 配置文件oracle.jdbc.driver.OracleDriverscotttigerjdbc:oracle:thin

6、:127.0.0.1:1521:orclhsporg.hibernate.dialect.OracleDialecttrue7. 测试文件 TestMain.javapackage com.hsp.view;import com.hsp.util.*;import java.util.Date;欢迎下载韩顺平老师的 PHP 视频教程 ,详情查看 http:/import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.c

7、fg.*;import com.hsp.domain.Employee;public class TestMain /* param args*/public static void main(String args) /查询load-hql 语句 (hibernate query language)public static void delEmp() /删除/获取一个 sessionSession session=MySessionFactory.getSessionFactory().openSession();Transaction ts=session.beginTransactio

8、n();/删除 1.先获取该雇员,然后删除Employee emp=(Employee) session.load(Employee.class, 3);session.delete(emp);mit();session.close();public static void updateEmp() / TODO Auto-generated method stub/修改用户/获取一个会话Session session=MySessionFactory.getSessionFactory().openSession();Transaction ts=session.beginTransactio

9、n();/修改用户 1. 获取要修改的用户,2.修改/load 是通过主键属性,获取该对象实例.表的记录对应Employee emp=(Employee) session.load(Employee.class, 3);emp.setName(“韩顺平 8“);/update.emp.setEmail(““);mit();session.close();欢迎下载韩顺平老师的 PHP 视频教程 ,详情查看 http:/public static void addEmployee() /我们使用 hibernate 完成 crud 操作 这里我们只见对象,不见表/现在我们不是用 service ,

10、直接测试./1。创建 Configuration,该对象用于读取 hibernate.cfg.xml,并完成初始化Configuration configuration=new Configuration().configure();/2.创建 SessoinFactory这是一个会话工厂,是一个重量级的对象 SessionFactory sessionFactory=configuration.buildSessionFactory();/3.创建 Sessoin 相当于 jdbc Connection servelt HttpSession ,也不是 jsp sessionSession

11、session=sessionFactory.openSession();/4.对 hiberate 而言,要求程序员,在进行 增加,删除,修改的时候使用事务提交,Transaction transaction = session.beginTransaction();/添加一个雇员Employee employee=new Employee();employee.setName(“shunping“);employee.setEmail(““);employee.setHiredate(new Date();/insert ./保存session.save(employee);/save e

12、mployee 就是持久化该对象 (把对象保存到了数据库中称为一条记录)/=insert into .被 hiberante 封装/提交mit();session.close(); 现在我们体验一下 hibernate 切换数据库的优势.这次,我们使用 让 hibernate 自动完成 domain-映射文件-表 的工作.1. 首先我们把 hibernate.cfg.xml 文件重新配置.欢迎下载韩顺平老师的 PHP 视频教程 ,详情查看 http:/com.mysql.jdbc.Driverrootrootjdbc:mysql:/localhost:3306/testorg.hibernat

13、e.dialect.MySQLDialecttruecreate2. 对对象映射文件,做了相应的修改.笔试题: 请列举出 hibernate 常见的接口和类?请解释什么事 pojo 类,它有什么要求:1. pojo 类是和一张表对应2. 一般我们放在 com.xxx.domain 下3. pojo 需要一个主键属性(用于标示一个 pojo 对象)4. 除了主键属性外,它应当还有其属性,属性的访问权限是 private5. 提供 set /get 方法6. 它应当有一个无参的构造方法(hibernate 反射)7. pojo 类其实就是 javabean/ 有些老程序员 叫他 date 对象上机

14、练习:写一个简单的雇员管理系统.emp( id , name , tel , birthday ),可以,进入主界面请选择数据库类型1. 表示 连接 oracle2. 表示 连接 mysql3. 表示 连接 sql server欢迎下载韩顺平老师的 PHP 视频教程 ,详情查看 http:/请选择操作1. 显示所有雇员2. 根据 id 查询指定雇员3. 修改雇员信息(请先输入 id)4. 根据 id 删除雇员.* 用户可以多次选择操作. hibernate 的核心类和接口 Configuration 类它的用处是:1. 读取 hibernate.cfg.xml2. 管理对象关系映射文件 3.

15、加载 hibernate 的驱动,url ,用户.4. 管理 hibernate 配置信息 hibernate.cfg.xml 对象关系映射文件 SessionFactory (会话工厂)1. 可以缓存 sql 语句和数据 (称为 session 级缓存)!2. 是一个重量级的类,因此我们需要保证一个数据库,有一个 SessionFactroy这里我们讨论一个通过 SessionFactory 获取 Session 的两个方法 openSession() 一个 getCurrentSession();1. openSession() 是获取一个新的 session2. getCurrentSe

16、ssion () 获取和当前线程绑定的 session,换言之,在同一个线程中,我们获欢迎下载韩顺平老师的 PHP 视频教程 ,详情查看 http:/取的 session 是同一 session,这样可以利于事务控制如果希望使用 getCurrentSession 需要配置 hibernate.cfg.xml 中配置.3. 如何选择原则:如果需要在同一线程中,保证使用同一个 Session 则,使用 getCurrentSession()如果在一个线程中,需要使用不同的 Session,则使用 opentSession()4. 通过 getCurrentSession() 获取的 sessio

17、n 在事务提交后,会自动关闭,通过openSession()获取的 session 则必须手动关闭5. 如果是通过 getCurrentSession() 获取 sesssion ,进行查询需要事务提交 .全局事务和本地事务jndi 如何确定你的 session 有没有及时关闭windows cmd netstat an oracle 1521 mysql 3306 sql server 1433linux/unix netstat anp top session 接口它的主要功能和作用是:1. Session 一个实例代表与数据库的一次操作( 当然一次操作可以是 crud 组合)2. Ses

18、sion 实例通过 SessionFactory 获取,用完需要关闭。3. Session 是线程不同步的( 不安全),因此要保证在同一线程中使用 ,可以用getCurrentSessiong()。4. Session 可以看做是持久化管理器,它是与持久化操作相关的接口 get vs load1. 如果查询不到数据,get 会返回 null,但是不会报错 , load 如果查询不到数据,则报错ObjectNotFoundException欢迎下载韩顺平老师的 PHP 视频教程 ,详情查看 http:/2. 使用 get 去查询数据, (先到一级/ 二级) 会立即向 db 发出查询请求(sele

19、ct .), 如果你使用的是 load 查询数据,(先到一级、二级)即使查询到对象,返回的是一个代理对象,如果后面没有使用查询结果,它不会真的向数据库发 select ,当程序员使用查询结果的时候才真的发出 select ,这个现象我们称为懒加载 (lazy)3. 通过修改配置文件,我们可以取消懒加载4. 如何选择使用哪个: 如果你确定 DB 中有这个对象就用 load(),不确定就用 get()(这样效率高) 我们对获取 session 的工具类,升级,让它可以直接返回 全新的 session 和线程相关的 session 代码:package com.hsp.util;import org

20、.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;final public class HibernateUtil /SqlHelper private static SessionFactory sessionFactory=null;/使用线程局部模式private static ThreadLocal threadLocal=new ThreadLocal();private HibernateUtil();static sessionFactory=

21、new Configuration().configure(“com/hsp/config/hsp.cfg.xml“).buildSessionFactory();/获取全新的全新的 sesessionpublic static Session openSession()return sessionFactory.openSession();/获取和线程关联的 sessionpublic static Session getCurrentSession()Session session=threadLocal.get();/判断是否得到if(session=null)session=sessi

22、onFactory.openSession();/把 session 对象设置到 threadLocal,相当于该 session 已经和线程绑定threadLocal.set(session);return session;欢迎下载韩顺平老师的 PHP 视频教程 ,详情查看 http:/ query 接口通过 query 接口我们可以完成更加复杂的查询任务.举例: 通过用户来查询数据.快如入门 :Session session=HibernateUtil.getCurrentSession();Transaction ts=null;try ts=session.beginTransacti

23、on();/获取 query 引用 这里 Employee 不是表.而是 domain 类名/where 后面的条件可以是类的属性名,也可以是表的字段,安照 hibernate 规定,我们还是应该使用类的属性名.Query query=session.createQuery(“from Employee where namehsp=shunping“);/通过 list 方法获取结果,这个 list 会自动的将封装成对应的 domain 对象/所以我们 jdbc 进行二次封装的工作没有.List list=query.list();for(Employee e: list)System.out.println(e.getAaaid()+“ “+e.getHiredate();mit(); catch (Exception e) if(ts!=null)ts.rollback();throw new RuntimeException(e.getMessage();finally/关闭 sessionif(session!=null criteria 接口的简单使用快如入门:Session session=HibernateUtil.getCurrentSession();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。