ch11.Hibernate框架

合集下载

Hibernate教程---看这一篇就够了

Hibernate教程---看这一篇就够了

Hibernate教程---看这⼀篇就够了1 Hibernate概述1.1什么是hibernate框架(重点)1 hibernate框架应⽤在javaee三层结构中 dao层框架2 在dao层⾥⾯做对数据库crud操作,使⽤hibernate实现crud操作,hibernate底层代码就是jdbc,hibernate对jdbc进⾏封装,使⽤hibernate好处,不需要写复杂jdbc代码了,不需要写sql语句实现3 hibernate开源的轻量级的框架4 hibernate版本Hibernate3.xHibernate4.xHibernate5.x(学习)1.2 什么是orm思想(重点)1 hibernate使⽤orm思想对数据库进⾏crud操作2 在web阶段学习 javabean,更正确的叫法实体类3 orm:object relational mapping,对象关系映射⽂字描述:(1)让实体类和数据库表进⾏⼀⼀对应关系让实体类⾸先和数据库表对应让实体类属性和表⾥⾯字段对应(2)不需要直接操作数据库表,⽽操作表对应实体类对象画图描述2 Hibernate⼊门2.1 搭建hibernate环境(重点)第⼀步导⼊hibernate的jar包因为使⽤hibernate时候,有⽇志信息输出,hibernate本⾝没有⽇志输出的jar包,导⼊其他⽇志的jar包不要忘记还有mysql驱动的jar包第⼆步创建实体类package cn.itcast.entity;public class User {/*hibernate要求实体类有⼀个属性唯⼀的*/// private int uid;private String uid;private String username;private String password;private String address;// public int getUid() {// return uid;// }// public void setUid(int uid) {// this.uid = uid;// }public String getUsername() {return username;}public String getUid() {return uid;}public void setUid(String uid) {this.uid = uid;}public void setUsername(String username) {ername = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}}(1)使⽤hibernate时候,不需要⾃⼰⼿动创建表,hibernate帮把表创建第三步配置实体类和数据库表⼀⼀对应关系(映射关系)使⽤配置⽂件实现映射关系(1)创建xml格式的配置⽂件- 映射配置⽂件名称和位置没有固定要求- 建议:在实体类所在包⾥⾯创建,实体类名称.hbm.xml(2)配置是是xml格式,在配置⽂件中⾸先引⼊xml约束- 学过约束dtd、schema,在hibernate⾥⾯引⼊的约束dtd约束(3)配置映射关系<hibernate-mapping><!-- 1 配置类和表对应class标签name属性:实体类全路径table属性:数据库表名称--><class name="er" table="t_user"><!-- 2 配置实体类id和表id对应hibernate要求实体类有⼀个属性唯⼀值hibernate要求表有字段作为唯⼀值--><!-- id标签name属性:实体类⾥⾯id属性名称column属性:⽣成的表字段名称--><id name="uid" column="uid"><!-- 设置数据库表id增长策略native:⽣成表id值就是主键⾃动增长--><generator class="native"></generator></id><!-- 配置其他属性和表字段对应name属性:实体类属性名称column属性:⽣成表字段名称--><property name="username" column="username"></property><property name="password" column="password"></property><property name="address" column="address"></property></class></hibernate-mapping>第四步创建hibernate的核⼼配置⽂件(1)核⼼配置⽂件格式xml,但是核⼼配置⽂件名称和位置固定的- 位置:必须src下⾯- 名称:必须hibernate.cfg.xml(2)引⼊dtd约束(3)hibernate操作过程中,只会加载核⼼配置⽂件,其他配置⽂件不会加载第⼀部分:配置数据库信息必须的第⼆部分:配置hibernate信息可选的第三部分:把映射⽂件放到核⼼配置⽂件中<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- 第⼀部分:配置数据库信息必须的 --><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property> <property name="ername">root</property><property name="hibernate.connection.password">root</property><!-- 第⼆部分:配置hibernate信息可选的--><!-- 输出底层sql语句 --><property name="hibernate.show_sql">true</property><!-- 输出底层sql语句格式 --><property name="hibernate.format_sql">true</property><!-- hibernate帮创建表,需要配置之后update: 如果已经有表,更新,如果没有,创建--><property name="hibernate.hbm2ddl.auto">update</property><!-- 配置数据库⽅⾔在mysql⾥⾯实现分页关键字 limit,只能使⽤mysql⾥⾯在oracle数据库,实现分页rownum让hibernate框架识别不同数据库的⾃⼰特有的语句--><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!-- 第三部分:把映射⽂件放到核⼼配置⽂件中必须的--><mapping resource="cn/itcast/entity/User.hbm.xml"/></session-factory></hibernate-configuration>2.2 实现添加操作第⼀步加载hibernate核⼼配置⽂件第⼆步创建SessionFactory对象第三步使⽤SessionFactory创建session对象第四步开启事务第五步写具体逻辑 crud操作第六步提交事务第七步关闭资源@Testpublic void testAdd() {// 第⼀步加载hibernate核⼼配置⽂件// 到src下⾯找到名称是hibernate.cfg.xml//在hibernate⾥⾯封装对象Configuration cfg = new Configuration();cfg.configure();// 第⼆步创建SessionFactory对象//读取hibernate核⼼配置⽂件内容,创建sessionFactory//在过程中,根据映射关系,在配置数据库⾥⾯把表创建SessionFactory sessionFactory = cfg.buildSessionFactory(); // 第三步使⽤SessionFactory创建session对象// 类似于连接Session session = sessionFactory.openSession();// 第四步开启事务Transaction tx = session.beginTransaction();// 第五步写具体逻辑 crud操作//添加功能User user = new User();user.setUsername("⼩王");user.setPassword("250");user.setAddress("⽇本");//调⽤session的⽅法实现添加session.save(user);// 第六步提交事务mit();// 第七步关闭资源session.close();sessionFactory.close();}3 内容⽬录1 实体类编写规则2 hibernate主键⽣成策略(1)native(2)uuid3 实体类操作(1)crud操作(2)实体类对象状态4 hibernate的⼀级缓存5 hibernate的事务操作(1)事务代码规范写法6 hibernate其他的api(查询)(1)Query(2)Criteria(3)SQLQuery3.1 实体类编写规则1 实体类⾥⾯属性私有的2 私有属性使⽤公开的set和get⽅法操作3 要求实体类有属性作为唯⼀值(⼀般使⽤id值)4 实体类属性建议不使⽤基本数据类型,使⽤基本数据类型对应的包装类(1)⼋个基本数据类型对应的包装类- int – Integer- char—Character、- 其他的都是⾸字母⼤写⽐如 double – Double(2)⽐如表⽰学⽣的分数,假如 int score;- ⽐如学⽣得了0分,int score = 0;- 如果表⽰学⽣没有参加考试,int score = 0;不能准确表⽰学⽣是否参加考试l 解决:使⽤包装类可以了, Integer score = 0,表⽰学⽣得了0分,表⽰学⽣没有参加考试,Integer score = null;3.2 Hibernate主键⽣成策略1 hibernate要求实体类⾥⾯有⼀个属性作为唯⼀值,对应表主键,主键可以不同⽣成策略2 hibernate主键⽣成策略有很多的值3 在class属性⾥⾯有很多值(1)native:根据使⽤的数据库帮选择哪个值(2)uuid:之前web阶段写代码⽣成uuid值,hibernate帮我们⽣成uuid值3.3 实体类操作对实体类crud操作添加操作1 调⽤session⾥⾯的save⽅法实现根据id查询1 调⽤session⾥⾯的get⽅法实现修改操作1 ⾸先查询,修改值(1)根据id查询,返回对象删除操作1 调⽤session⾥⾯delete⽅法实现3.4 实体类对象状态(概念)1 实体类状态有三种(1)瞬时态:对象⾥⾯没有id值,对象与session没有关联(2)持久态:对象⾥⾯有id值,对象与session关联(3)托管态:对象有id值,对象与session没有关联2 演⽰操作实体类对象的⽅法(1)saveOrUpdate⽅法:实现添加、实现修改3.5 Hibernate的⼀级缓存什么是缓存1 数据存到数据库⾥⾯,数据库本⾝是⽂件系统,使⽤流⽅式操作⽂件效率不是很⾼。

跟我学Hibernate框架技术——应用Hibernate框架时所应该注意的问题

跟我学Hibernate框架技术——应用Hibernate框架时所应该注意的问题

目录1.1应用Hibernate框架时所应该注意的问题 (2)1.1.1开发要点 (2)1.1.2持久化类的基本结构要求 (6)1.1.3关于数据验证的问题 (9)1.1.4区分各种数据类型之间的差别 (16)1.1应用Hibernate框架时所应该注意的问题1.1.1开发要点1、PO与DTO的各自的应用要点(1)应该避免直接PO传递到系统中的其他层面在传统的MVC架构中,位于持久层的PO,是否允许被传递到其他层面如表示层或者业务层?由于PO的更新最终将被映射到实际数据库中,如果PO在其他层面(如表示层)发生了变动,那么可能会对Model层造成意想不到的破坏。

因此,一般而言,应该避免直接PO传递到系统中的其他层面。

(2)利用DTO(实现了java.io.Serializable接口的VO)一种解决办法是,通过一个VO,通过属性复制使其具备与PO相同属性值,并以其作为传输媒质(实际上,这个VO被用作Data Transfer Object,即所谓的DTO),将此VO(或者DTO)传递给其它层面以实现必须的数据传送。

(3)属性复制的方法属性复制可以通过Apache Jakarta Commons Beanutils (/commons/beanutils/)组件提供的属性批量复制功能,避免繁复的get/set操作。

UserInfo oneUserInfoPO=(UserInfo)resultList.get(0);oneUserInfoVO.setUserID(oneUserInfoPO.getId().intValue());oneUserInfoVO.setUserName(oneUserInfoPO.getUserName());oneUserInfoVO.setUserPassWord(oneUserInfoPO.getUserPassWord());oneUserInfoVO.setUserType(oneUserInfoPO.getUserType());oneUserInfoVO.setAliaoName(oneUserInfoPO.getAliaoName());oneUserInfoVO.setPassWordAsk(oneUserInfoPO.getPassWordAsk());oneUserInfoVO.setUserImage(oneUserInfoPO.getUserImage());oneUserInfoVO.setPassWordAnswer(oneUserInfoPO.getPassWordAnswer());oneUserInfoVO.setUserMail(oneUserInfoPO.getUserMail());oneUserInfoVO.setRegisterTime(oneUserInfoPO.getRegisterTime());可以在/commons/beanutils/downloads.html进行下载下面的例子中,我们把zhang对象的所有属性复制到wang对象中,然后将wang设计为DTO:UserInfo zhang=new UserInfo();UserInfo wang=new UserInfo();zhang.setName("zhang");zhang.setUserType(1);try{BeanUtils.copyProperties(wang,zhang);System.out.println("UserName=>"+wang.getName());System.out.println("UserType=>"+wang.getUserType());}catch(IllegalAccessException e){e.printStackTrace();}catch(InvocationTargetException e){e.printStackTrace();}2、持久化类中的id属性(1)对象标识符(OID,Object Identifier)前面例中的Book持久化类有一个id属性,用来惟一标识Book类的每个对象。

跟我学Hibernate框架技术——Hibernate框架技术基础

跟我学Hibernate框架技术——Hibernate框架技术基础

目录1.1 跟我学Hibernate框架技术——Hibernate框架技术基础 (2)1.1.1 O/R Mapping工具----Hibernate技术基础 (2)1.1.2 Hibernate和JDBC在性能上的对比 (9)1.1.3 Hibernate系统介绍 (12)1.1.4 Hibernate系统的应用环境 (18)1.1.5 Hibernate为什么如此成功 (20)1.1跟我学Hibernate框架技术——Hibernate框架技术基础1.1.1O/R Mapping工具----Hibernate技术基础1、Hibernate基本概念(1)Hibernate技术本质上是一个提供数据库服务的中间件●Hibernate 是一个面向Java 环境的对象/ 关系数据库映射工具,把Java类对应到数据库的table中,并且采用了xml技术、Java Reflection技术等。

●Hibernate技术本质上也是遵守的ODMG标准的,它的出色源于不断的升级、不断的维护、修改。

以及完善的文档、人气很旺的论坛。

还有很重要的一点就是它的易学易用性。

●Hibernate它不仅提供了从Java类到数据表的映射,也提供了数据查询和恢复等机制。

可以大幅度减少开发时人工使用SQL 和JDBC 处理数据的时间。

(2)Hibernate是一个开放源代码的对象关系映射框架●以OO的方式来操纵数据库它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

●Hibernate可以应用在任何使用JDBC的场合Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

try{stmt=con.createStatement();rs=stmt.executeQuery("select * from student");metaData = rs.getMetaData();for(int column = 0; column < metaData.getColumnCount(); column++){System.out.print(metaData.getColumnName(column+1)+"\t");}while(rs.next()){for (int i = 1; i <= metaData.getColumnCount(); i++){System.out.print(rs.getObject(i)+"\t");}System.out.println("");}stmt.close(); //must closecon.close();}catch(SQLException e){}(3)主要的特点及与Entity EJB Bean的不同点Hibernate是JDBC的轻量级的对象封装它是一个独立的对象持久层框架,和应用服务器以及和EJB没有什么必然的联系。

hibernate框架的工作原理

hibernate框架的工作原理

hibernate框架的工作原理Hibernate框架的工作原理Hibernate是一个开源的ORM(Object-Relational Mapping)框架,它将Java对象映射到关系型数据库中。

它提供了一种简单的方式来处理数据持久化,同时也提供了一些高级特性来优化性能和可维护性。

1. Hibernate框架的基本概念在开始讲解Hibernate框架的工作原理之前,需要先了解一些基本概念:Session:Session是Hibernate与数据库交互的核心接口,它代表了一个会话,可以用来执行各种数据库操作。

SessionFactory:SessionFactory是一个线程安全的对象,它用于创建Session对象。

通常情况下,应用程序只需要创建一个SessionFactory对象。

Transaction:Transaction是对数据库操作进行事务管理的接口。

在Hibernate中,所有对数据库的操作都应该在事务中进行。

Mapping文件:Mapping文件用于描述Java类与数据库表之间的映射关系。

它定义了Java类属性与数据库表字段之间的对应关系。

2. Hibernate框架的工作流程Hibernate框架主要分为两个部分:持久化层和业务逻辑层。

其中,持久化层负责将Java对象映射到数据库中,并提供数据访问接口;业务逻辑层则负责处理业务逻辑,并调用持久化层进行数据访问。

Hibernate框架的工作流程如下:2.1 创建SessionFactory对象在应用程序启动时,需要创建一个SessionFactory对象。

SessionFactory是一个线程安全的对象,通常情况下只需要创建一个即可。

2.2 创建Session对象在业务逻辑层需要进行数据访问时,需要先创建一个Session对象。

Session是Hibernate与数据库交互的核心接口,它代表了一个会话,可以用来执行各种数据库操作。

2.3 执行数据库操作在获取了Session对象之后,就可以执行各种数据库操作了。

hibernate框架用法

hibernate框架用法

hibernate框架用法
Hibernate框架是一个开源的对象关系映射(ORM)框架,它可以
将Java对象映射到关系数据库中的表中,从而使得开发人员可以使用Java编程语言来访问和操作数据库。

Hibernate的使用流程如下:
1. 在Java类中定义实体对象及其属性和关系;
2. 在Hibernate中配置映射文件,将实体类映射为数据库表;
3. 通过Session API实现数据的增删改查操作。

Hibernate框架的优点有:
1. 开发效率高:Hibernate自动处理对象与数据库表之间的映射,使得开发人员可以将精力集中在业务逻辑上。

2. 数据库平台无关性好:Hibernate提供了一套底层数据库操作
接口,在数据操作层面上实现了面向对象与关系数据库的交互。

3. 透明性强:Hibernate框架屏蔽了大部分JDBC的细节,对于开发人员而言可以专注于业务需求的实现。

4. 高性能:Hibernate框架缓存机制、懒加载等一些优化措施,
可以改善数据库访问的性能。

同时,Hibernate还提供了一些高级特性,如事务管理、二级缓存、查询缓存、延迟加载等,可以更好地满足复杂应用的需要。

【Hibernate】Hibernate框架配置详解

【Hibernate】Hibernate框架配置详解

【Hibernate】Hibernate框架配置详解通过Hibernate我们可以⽅便地操作数据库读取出来的信息,减少了繁琐的JDBC操作。

⼀般情况下,有两种⽅式可以进⾏Hibernate的配置,⼀种是通过配置⽂件进⾏配置,另⼀种是通过注解进⾏配置。

我将通过注解简单介绍Hibernate框架的配置。

Hibernate框架的配置⼀般可以分为以下⼏个步骤:1.添加基本的Hibernate Jar包2.添加注解的Jar包3.编写Hibernate.cfg.xml⽂件4.编写POJO⽂件,并编写注释5.编写测试⽂件,导出到数据库进⾏测试。

⼀、导⼊基本的Hibernate Jar包⼆、导⼊Hibernate Annotation 的Jar包三、编写Hibernate.cfg.xml⽂件1<?xml version='1.0' encoding='UTF-8'?>2<!DOCTYPE hibernate-configuration PUBLIC3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"4 "/hibernate-configuration-3.0.dtd">56<!-- Generated by MyEclipse Hibernate Tools. -->7<hibernate-configuration>89<session-factory>10<!-- 配置JDBC连接属性 -->11<property name="myeclipse.connection.profile">12 com.mysql.jdbc.Driver13</property>14<property name="connection.url">15 jdbc:mysql://localhost:3306/basehibernate16</property>17<property name="ername">root</property>18<property name="connection.password">sa</property>19<property name="connection.driver_class">20 com.mysql.jdbc.Driver21</property>22<property name="dialect">23 org.hibernate.dialect.MySQLDialect24</property>2526<!-- ⾃动建表 -->27<property name="hbm2ddl.auto">auto</property>28<property name="connection.autocommit">true</property>29<mapping class="com.basehibernate.pojo.Department"/>30<mapping class="com.basehibernate.pojo.Employee"/>31<mapping class="com.basehibernate.pojo.Meal"/>32<mapping class="com.basehibernate.pojo.OrderMeal"/>33<mapping class="com.basehibernate.pojo.GradeMeal"/>34<mapping class="com.basehibernate.pojo.RewardMeal"/>3536</session-factory>3738</hibernate-configuration>不同数据库连接在Hibernate.cfg.xml中的配置不同,这⾥以MySQL为例。

Hibernate框架分析

Hibernate框架分析

Hibernate小试牛刀1、概述Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了封装,Hibernate提供了强大,高性能的对象到关系型数据库的持久化服务,利用Hibernate,开发人员可以按照Java的基础语言进行持久层开发。

Hibernate提供的HQL是面向对象的查询语言,它在对象型数据和关系型数据库之间,构建了一条快速,高效,便捷的沟通渠道。

我们在本次课中要掌握持久化以及对象-关系映射等概念,并且掌握如何配置HIbernate,理解Hibernate的基础语义和配置文件中的各个元素。

我们要了解Hibernate的体系结构,和Hibernate中的事物管理,以及简单了解HQL语言。

最后要学会使用Hibernate开发应用程序。

2、Hibernate框架简介开发程序使用HIbernate框架的好处由于开发的多数软件产品都是基于数据库的,也就是说我们在一个软件中的操作多数都是对数据库中的数据进行的操作。

我们对数据库大量操作就会导致数据访问层的代码变得非常繁琐,并且直接降低了我们开发效率,想想我们之前写的Dao类,假如我们要操作好多表,每个表又有很多很多的字段,假如我们查询几个表的信息,是不是我们这里的DAO层代码就非常繁琐了。

我们把大把的时间放在编写DAO类,而且我们手动编写这些代码很容易出错,这也会为调试工作带来麻烦。

这和企业要求高效率开发相违背,那么有没有一套更好的访问数据库框架,使我们可以摆脱DAO层的困境呢?很显然,我们要学习的HIbernate框架就是这样一个框架。

3、理解持久化瞬时状态在程序运行的时候有些程序数据保存在内存当中,当程序退出后,这些数据就不复存在了。

所以我们称这些数据的状态为瞬时的。

持久状态就是我们在使用一些软件的时候,有些数据在程序退出以后,还以文件等形式保存在硬盘中,那么我们称这些数据的状态是持久的。

持久化就是将程序中的数据在瞬时状态和持久状态之间转换的机制,JDBC就是一种持久化机制,将程序数据直接保存成文件也是持久化机制的一种实现。

Hibernate框架的优势和适用场景

Hibernate框架的优势和适用场景

Hibernate框架的优势和适用场景Hibernate是一个开源的对象关系映射(Object Relational Mapping,简称ORM)框架,它提供了一种方便的方式来将Java对象映射到关系型数据库中,使得开发人员可以更加专注于业务逻辑的开发,而无需关注底层数据库操作的细节。

在本文中,我们将重点探讨Hibernate框架的优势以及其适用场景。

一、Hibernate框架的优势1. 提供了简化的数据库操作:使用Hibernate框架能够避免编写大量的SQL语句,因为它主要通过对象操作来实现数据的持久化,将Java对象直接映射到数据库表中。

这样可以极大地简化数据库操作,减少了开发人员的工作量。

2. 跨数据库平台的支持:Hibernate框架对于跨数据库平台的支持非常友好,开发人员不用担心因为使用不同的数据库而导致的兼容性问题。

Hibernate提供了统一的API,可以在多种不同的数据库系统之间无缝切换。

3. 提供了缓存机制:Hibernate具备有强大的缓存机制,可以提高系统的性能和响应速度。

一方面,Hibernate框架使用二级缓存来减少数据库交互次数,提高查询性能。

另一方面,Hibernate还提供了一级缓存,用于在会话期间缓存对象以及对象之间的关系,避免频繁地从数据库中加载数据。

4. 支持事务管理:Hibernate框架通过提供事务管理机制来确保数据的一致性和完整性。

通过使用Hibernate的事务管理功能,开发人员可以对数据库的操作进行隔离、回滚和提交等操作,确保在多线程或分布式环境下的数据一致性。

5. 易于测试和维护:使用Hibernate框架进行开发的代码具有良好的可测试性和可维护性。

因为Hibernate将业务逻辑和数据库操作解耦,使得代码的编写更加清晰易懂,同时也方便进行单元测试和代码维护。

二、Hibernate框架的适用场景1. 大型企业级应用:Hibernate框架适用于需要对大量复杂的数据进行处理的大型企业级应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第11章 Hibernate框架
陈小潘 E-mail: xpchen@
计算机与信息工程学院
本章要点
ORM概述 Hibernate框架快速入门 理解Hibernate核心类 Hibernate查询 Hibernate映射 检索策略及优化
Hibernate过滤
Java Web程序设计
Java Web程序设计
15
11.1.2主流ORM框架
• Hibernate MyBatis对比 • 总结
– MyBatis就好在简单易用,上手快,延续了很好的SQL 使用经验,对于没有那么高的对象模型要求的项目来说, 使用起来非常顺手。代价就是功能比较简陋,后期优化 的空间不大,并且所有的对数据库底层的操作其实还是 自己手写的。
• 在4.3版本的帮助文档中能方便的找到快速入门的例 子
• 而在5.x版本的帮助文档中无法找到例子
Java Web程序设计
22
11.2.1 Hibernate的下载与安装
目录结构:
Java Web程序设计
23
11.2.1 Hibernate的下载与安装
目录结构: – documentation:该文件夹中包含了Hibernate的API文 档、帮助手册以及开发向导等文件。值得说明的是 Hibernate的文档非常丰富,还专门提供包括中文版中内 的用户帮助手册,而且提供了html和pdf等多种文件格 式,方便用户查阅。 – lib:该文件夹包括了Hibernate所有的运行库文件资源 包,包括应用Hibernate必须使用的类库文件等。 – project:Hibernate框架的源代码文件夹。
Java Web程序设计
6
11.1.1 认识ORM
• Java中对象和关系数据库进行数据交互的方式
– JDBC访问数据库访问的步骤
• 通过JDBC 提供的API 对数据库进行增、删、改、查的操 作
• 通过JDBC 对数据库操作中异常的处理
– 使用JDBC的缺点
• 开发效率低 • 代码冗余 • 重复性工作多
Java Web程序设计
10
11.1.2主流ORM框架
Hibernate和MyBatis对比(了解) 一、相同点
1.架构相同 Hibernate和MyBatis使用的是相同的框架,它们都是对 JDBC的封装,只是Hibernate封装的更完全一点。 2.都可以使用XML创建映射文件和配置文件,也可以使 用注解,但是不推荐用注解,注解的使用范围比较小。 3.对于单一表,CRUD的操作都比较简单,两者的工作量 没有什么区别。
Java Web程序设计
7
11.1.1 认识ORM
Hibernate 实现
JDBC 实现
Java Web程序设计
8
11.1.2主流ORM框架
• Hibernate: JBoss属下的一个ORM工具,同时也是当前最为主流
的开源ORM框架。Hibernate对JDBC进行了轻量级的封 装,将Java对象与对象关系映射至关系型数据库中的数 据表与数据表之间的关系。
Java Web程序设计
24
11.2.2 在Eclipse中配置Hibernate开发环境
(1)复制以下文件至项目的WEB-INF/lib目录(含JDBC驱动)
Java Web程序设计
25
11.2.2 在Eclipse中配置Hibernate开发环境
(2)创建Hibernate配置文件hibernate.cfg.xml
12
11.1.2主流ORM框架
Hibernate MyBatis对比
二、不同点
• MyBatis在数据库的操作上比Hibernate要灵活,主要因为 MyBatis是自己写SQL语句,并且支持动态查询,可以理解为 一种可以编程的SQL语句,所以在数据的操作上比Hibernate方 便得多。Hibernate在这方面灵活性不如MyBatis,它用HQL语 句来进行数据库的操作,HQL是完全数据库独立的,Hibernate 通过HQL语句自动生成SQL语句,程序员完全不用关心数据的 到底是怎么被操作的。
• TopLink:一个Oracle公司的商业产品,TOPLink在关 系数据库表中存储Java对象和EJB提供了高度灵活和 高效的机制。TopLink为开发人员提供极佳的性能和 选择,可以与任何数据库、任何应用服务器、任何开 发工具集和过程以及任何Java EE体系结构协同工作。
Java Web程序设计
入数据库中 --> <property name="hbm2ddl.auto">update</property> <!-- 配置ORM映射文件 --> <mapping resource="henu/po/Person.hbm.xml"></mapping> </session-factory>
</hibernate-configuration>
Java Web程序设计
19
11.2.1 Hibernate的下载与安装
• 下载地址:
Java Web程序设计
20
11.2.1 Hibernate的下载与安装
• 获取较旧的版本
Java Web程序设计
21
11.2.1 Hibernate的下载与安装
• Hibernate在优化方面的能力好得多。Hibernate的缓存策略 配置更加丰富(SessionFactory对象保存二级缓存数据), 并且默认使用延时加载特性(只有使用对象的时候才会 请求SQL语句)。Session的管理机制也更加完善,同时 支持批量抓取。
• Hibernate的HQL语言和数据库完全独立,因此可移植性 很好,换一个数据库不需要修改代码,MyBatis项目中所 有的SQL语句都是依赖具体的数据库的,所以对不同的数 据库类支持不好。
2
本章提纲
• 11.1 ORM概述 • 11.2 Hibernate框架快速入门 • 11.3 Hibernate核心API • 11.4 Hibernate查询 • 11.5 Hibernate映射
Java Web程序设计
3
11.1 ORM概述
11.1.1 认识ORM 11.1.2 主流ORM框架介绍
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory>
• Hibernate支持继承映射和集合映射(一对一,一对多,多对 多)。MyBatis在这方面则需要自己写SQL语句。Hibernate无 需关心SQL的生成与结果映射,可以更专注于业务流程。
Java Web程序设计
13
11.1.2主流ORM框架
Hibernate和MyBatis对比 二、不同点
Java Web程序设计
16
11.1.2主流ORM框架
Hibernate缺点 – Hibernate限制所使用的对象模型。例如,一个持久 性类不能映射到多个表。
Java Web程序设计
17
11.1.2主流ORM框架
• OJB:Apache的一个开源项目,是iBATIS的一个后继 ORM产品。OJB(ObJect Relational Bridge)使用基于 XML的对象关系映射。OJB能够完成从Java对象到关 系数据库的透明存储。
Java Web程序设计
26
11.2.2 在Eclipse中配置Hibernate开发环境
(2)创建Hibernate配置文件hibernate.cfg.xml
<!-- 数据库用户对应的密码 --> <property name="connection.password">password</property>
18
11.2 Hibernate框架快速入门
11.2.1 Hibernate的下载与安装 11.2.2 在Eclipse中配置Hibernate开发环境 11.2.3 理解配置文件hibernate.cfg.xml 11.2.4 初步认识Hibernate映射文件 11.2.5 深入理解持久化类POJO 11.2.6 Hibernate的工作过程
<!-- 数据库对应的方言 --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 在操作数据库时是否打印SQL语句 --> <property name="show_sql">true</property> <!-- 打开 hbm2ddl.auto 选项将自动生成数据库模式(schema)- 直接加
<!-- 定义数据库连接驱动 --> <property name="connection.driver_class"> com.mysql.jdbc.Driver</property> <!-- 定义数据库服务器地址 --> <property name="connection.url"> jdbc:mysql://localhost:3306/db_admin?useUnicode=true&amp;character Encoding=utf-8</property> <!-- 数据库用户名 --> <property name="ername">root</property>
相关文档
最新文档