[计算机]hibernate笔记_王勇主讲

上传人:豆浆 文档编号:33390281 上传时间:2018-02-15 格式:DOC 页数:91 大小:2.07MB
返回 下载 相关 举报
[计算机]hibernate笔记_王勇主讲_第1页
第1页 / 共91页
[计算机]hibernate笔记_王勇主讲_第2页
第2页 / 共91页
[计算机]hibernate笔记_王勇主讲_第3页
第3页 / 共91页
[计算机]hibernate笔记_王勇主讲_第4页
第4页 / 共91页
[计算机]hibernate笔记_王勇主讲_第5页
第5页 / 共91页
点击查看更多>>
资源描述

《[计算机]hibernate笔记_王勇主讲》由会员分享,可在线阅读,更多相关《[计算机]hibernate笔记_王勇主讲(91页珍藏版)》请在金锄头文库上搜索。

1、王勇主讲 hibernate第 1 页 共 92 页1 讲 hibernate 介绍软件分层最好层和层之间是单向依赖,自上而下,上层依赖下层,但不能下层依赖上层,而且层和层之间最好依赖抽象(面向接口编程) ,当下层的实现发生改变时,上层是不知道的,上层也不需要知道,这样上层就不需要改代码。也就是下层发生改变,不需要改变上层。struts 框架属于表示层,hibernate 属于持久层。原来我们在持久层用的是 jdbc语句,来操作数据库。现在用 hibernate 代替 jdbc 操作数据库。hibernate 是对 jdbc 进行了封装,底层还是 jdbc 在操作数据库。为什么会产生 hibe

2、rnate 这个框架呢?原来用 jdbc 开发持久层,它有很多冗余的东西(重复代码) ,它还需要管理 connection 对象。第二个原因,java 语言是面向对象的,是对象模型。而数据库大部分产品是关系型数据库。我们需要把对象和关系进行映射。用 jdbc 就会出现阻抗不匹配。 hibernate 最核心的功能就是做了这件事,将对象映射到关系型数据库里,俗称 O/R Mapping。王勇主讲 hibernate第 2 页 共 92 页我们在开发中就更加面向对象了,OOA(面向对象分析 )、OOD(面向对象设计)、OOP(面向对象编程) 让实际操作更加趋于理论化(更加趋于对象)。hiberna

3、te 的另一个好处是移植性非常好,如果我们用了 hibernate 的标准用法,那么我们更换数据库产品就根本就不需要修改代码。hibernate 是轻量级的,没有侵入性,可以把任何 POJO(纯 java 对象,没有继承任何类或实现任何接口)对象保存到数据库里,它也不需要容器的支持,这样就测试和开发起来就简单化了。O/R Mapping 对象持久化产品还有 oracle 公司的 Toplink、sun 公司的JDO、Apache 公司的 OJB、sun 公司的 EJB2.0 以前版本 (它有一个 CMP 容器管理的持久化,这是重量级的,java 对象必须继承一些东西,才能保存到数据库里,还必须

4、依赖容器),这个现在几乎没有人用了。现在 EJB3.0 规范有一个 JPA 规范,java 持久化 API,它不是产品,hibernate实现了 JPA。IBatis 框架不是 ORM 框架,而是描述一个 sql 语句对应相关的对象,在代码编写中还是需要写 sql 语句。严格来说 Ibatis 是一个 SQL 映射。hibernate 优点:1 提高了生产力,因为可以直接查询出对象,这样就不需要写代码将结果集封装对象,这样就减少了代码量。2 使开发更加对象化,我们不需要关心表,我只关心对象模型,hibernate 会根据对象模型自动生成数据库表。不会出现阻抗不匹配,因为 hibernate 会

5、把对象模型的关系映射到关系型数据库里。比如对象的继承,但数据库中没有继承关系,这就是阻抗不匹配。hibernate 会让数据库的主外键关系模拟对象模型的各种关系。王勇主讲 hibernate第 3 页 共 92 页3 可移植性4 没有侵入性。hibernate 缺点:1 不方便使用数据库产品提供的特性功能,比如触发器等等,很难调优。因为封装太彻底。2 不适合大批量更新,因为有缓存。3 不适合做大量的统计查询功能。使用 hibernate 就是使我们采用对象化思维操作关系型数据库。2 讲 hibernate 包结构doc 目录里都是一些 api,eg 目录是 hibernate 的一个小例子,e

6、tc 目录有核心配置文件以及第三方产品的配置文件模板(比如hibernate.cfg.xml、log4j.properties 等文件),lib 目录是 hibernate 依赖第三方的 jar 文件,hibernate3.jar 是 hibernate 核心实现 jar 文件,src 目录就是 hibernate 核心实现源代码,test 目录是 hibernate 的测试程序。hibernate 和 spring 都是采用 dom4j 解析 xml 配置文件的。3 讲 第一个示例环境搭建加入/lib/*.jar 文件,这是 hibernate 所有依赖的第三方 jar 文件。加入/hibe

7、rnate3.jar,这是 hibernate 核心的 jar 文件。加入数据库驱动。加入 hibernate 核心配置文件 hibernate.cfg.xml。也可以用hibernate.properties,但现在不常用。核心配置文件要放到 src 类路径下。/配置数据库的驱动com.mysql.jdbc.Driver/配置数据库连接信息(URL)jdbc:mysql:/localhost:3306/hibernate_basemapping/配置数据库用户名root/配置数据库密码bjpowernode王勇主讲 hibernate第 4 页 共 92 页/数据库方言 (相当于适配器)or

8、g.hibernate.dialect.MySQLDialect为什么要数据库方言呢,比如我们分页时,mysql 采用 limit,oracle 采用rownum,但是 hibernate 代码是一样的,hibernate 就是要根据数据库的方言来选择分页的选择。方言也就是相当翻译的功能,把 hibernate 代码翻译成数据库底层对应的sql 语句。还有一些其它功能需要用的方言以后会慢慢讲到。/oracle 方言org.hibernate.dialect.OracleDialect4 讲 建立 User 实体类_映射实体类实体类的规则:就是普通的 java 类,并为所有属性生成 get/se

9、t 方法。为实体类创建实体映射文件,将类映射成表,属性映射成字段。一般建议映射文件和实体类放在同一个包里,因为它们是一体的,没有对立存在的意义。/实体类映射到表/映射主键标识/映射普通属性class 标签里的 name 表示实体类完整路径,table 表示创建一个表,指定表名,用关系模型来存放对象模型。如果没有 table 也会创建表的,只是表名和类名一样。id 标签映射实体对象的主键标识,column 指定主键标识映射到数据库里的字段名,如果没有 column,那么字段名就和实体对象的主键标识相同。普通属性映射用 property 标签,也可以用 column 指定属性映射到数据库里字段名称

10、,如果没有指定就和属性同名。王勇主讲 hibernate第 5 页 共 92 页5 讲 将 User 导出数据库上面讲了写映射文件,写好了还要把映射文件放到 hibernate 配置文件里。要写全路径,也就是写上包名,不能用.了,要用/ 。编写工具类 ExoprotDB.java,把 hibernate 配置文件里的内容,生成 DDL(数据库定义语言)语句,也就是 hbm2ddl。public static void main(String args) /默认读取 hibernate.cfg.xml 文件( 将配置文件转成了一个对象 )Configuration cfg = new Confi

11、guration().configure();/根据配置文件生成 DDL 语句SchemaExport export = new SchemaExport(cfg);/第一个 true 表示把 DDL 语句打印到控制台/第二个 true 表示把 DDL 语句生成到数据库export.create(true, true);如果不写 configure(),则会默认读取 hibernate.properties 文件。如果hibernate 配置文件改名了,则在 configure()里写上文件名,在类路径下读取,我们把配置文件放到类路径下。6 讲 将 User 对象保存到数据库表中访问那个数据库

12、,就必须读取配置文件,获取数据库信息,获得 Configuration 对象。根据 Configuration 对象获取 SessionFactory 对象。一个 SessionFactory对象就相当于一个数据库,相当于一个数据库的镜像,它只创建一份,是线程安全的。sessionFactory 有 session 工厂的作用,负责创建 session 对象。然后根据 sessionFactory 获取 session 对象,这个 session 不是 web 里那个session 对象,这个 session 对象是封装了 Connection 对象,我们操作一个session 就关联了一个

13、Connection 对象,它可以管理 Connection 对象。用session 对象就可以完成数据库的增删改查了。public static void main(String args) /读取 hibernate.cfg.xml 文件Configuration cfg = new Configuration().configure();/建立 SessionFactorySessionFactory factory = cfg.buildSessionFactory();/取得 sessionSession session = null;try /创建 session 对象王勇主讲 h

14、ibernate第 6 页 共 92 页session = factory.openSession();/开启事务session.beginTransaction();User user = new User();user.setName(张三 );user.setPassword(123);/保存 User 对象session.save(user);/提交事务session.getTransaction().commit();catch(Exception e) e.printStackTrace();/回滚事务session.getTransaction().rollback();fina

15、lly if (session != null) if (session.isOpen() /关闭 sessionsession.close();注意:session 对象导包时,选择 org.hibernate.session,在 eclipse 中显示两个,另一个是 hibernate2 版本的包。在 hibernate.cfg.xml 配置文件里添加一个属性,可以把生成 sql 打印到控制台。true也可以添加下面属性,把 sql 格式后打印到控制台。true在开发时最好加上上面两种的其中一个,可以方便我们查看生成的 sql 语句,方便我们调试。另外再配置一个 log4j 的配置文件 l

16、og4j.properties,放到 src 类路径下。我们暂时不管这个文件的配置,我们只需要在 hibernate 下 etc 目录下找到默认的log4j.properties 文件放到 src 下就可以了。这个配置文件里配置了很多 log4j 功能,如果想不要一些功能,就可以在配置文件里用#注释了,那么就不会有这个功能了。比如不要 debug 功能,就可以把 debug 注释了。这样就方便程序的调试,如果有异常就会打印到控制台。王勇主讲 hibernate第 7 页 共 92 页7 讲 回顾 hibernate 的优缺点POJO:纯 java 对象,没有继承任何类或没有实现任何接口。详情见 1 讲的内容。8 讲 解释 hibernate 第一个示例程序首先要读取配置文件,这样就会知道操作那个数据库。SessionFactory 对象就是一个工厂,用来产生 session 对象的,它代表一个数据库,可以把它理解成是一个

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号