hibernate第1章课程内容_第1页
hibernate第1章课程内容_第2页
hibernate第1章课程内容_第3页
hibernate第1章课程内容_第4页
hibernate第1章课程内容_第5页
已阅读5页,还剩28页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Oracle

Java

EE实训教材系列之九Hibernate课程内容Hibernate概述数据持久化、ORM概念及原理、Hibernate编程步骤Hibernate基础实体映射、ID生成器、Hibernate数据类型,Hibernate对象生命周期常用关联映射一对一、一对多、多对多不常用关系映射组件映射、继承映射查询Criteria、HQL、NativeSql(原生sql)事务管理事务传播性、事务隔离级别、事务控制、乐观锁和悲观锁缓存一级缓存、二级缓存、查询缓存第一章Hibernate概述目标理解数据持久化概念了解ORM应用背景及原理了解市场主流ORM框架理解Hibernate基本原理掌握Hibernate开发步骤熟练应用Hibernate

API对象持久化持久(Persistence):数据保存到可掉电设备中企业级应用中,即把内存中(瞬时)的数据保存到磁盘中加以“固化”对象持久化技术Java对象序列化和反序列化数据查询困难,效率低通过XML保存对象复杂的xml操作用于应用或公司间进行数据传输JDBC关系型数据库(RDBMS),SQL(DDL,

DML)低水平的数据操作对象关系映射(ORM)JDBC编程步骤注册驱动建立到数据库的连接创建statement执行SQL语句处理ResultSet关闭JDBC对象缺点:重复的编程步骤JDBC数据封装JDBC数据封装过程缺点:编程人员大部分精力花费在对ResultSet数据封装DBJDBC手动对

ResultSet数据封装Object什么是ORMObject

Relational

Mapping

(对象关系映射)通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。一般ORM包括四个部分一个对持久类对象进行CRUD操作的API一个语言或API用来规定与类和类属性相关的查询一个规定元数据映射的工具

一种技术可以让ORM的实现同事务对象一起进行dirty

checking,lazy

association

fetching以及其他的优化功能为什么采用ORM模式提高生产率(Productivity)可维护性(Maintainability)更好的性能(Performance)厂商独立性(Vendor

independence)★★★★★ORM

主流框架介绍Hibernate开源、性能、稳定性TopLinkOracle商业商业产品MyBatis开源、开放性Apache

OJB开源、性能、稳定性、支持各种标准规范Ebean,OpenJpa更易学习和使用Hibernate简介Hibernate发展历程2001年发布第一个版本2003年发布hibernate2(提供对大多数数据库支持,提供完善的数据关联、事务管理,缓存管理,延迟加载,同时提供堪称典范开发文档供用户使用)2005年发布hibernate3(更加丰富和完善的数据库支持,实体属性的延迟加载、对存储过程和自 定义持久化和支持,同时性能测试也令人满意)目前最新版本hibernate4.3.1final(spring为4.x之前的hibernate提供了HibernateTemplate,但 是hibernate

4.x版本没有提供,暂时还是一个大遗憾)Hibernate强大功能按照java基础语义(关联、继承、多态、组合及java集合框架)的持久层开发面对对象查询语言(HQL)条件查询(Criteria)原生sql查询缓存(一级缓存、二级缓存、查询缓存)Hibernate简介Jpa和hibernate的关系JPA全称:Java

Persistence

API通过注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。JPA的目的:一、简化现有JavaEE和JavaSE应用的对象持久化的开发工作;二、整合对ORM技术,实现持久化领域的统一。JPA由EJB3.0软件专家组开发,作为JSR-220实现的一部分。JPA的宗旨是为POJO提供持久化标准规范,能够脱离容器独立运行,很方便开发和测试。它的实现框架有Hibernate、TopLink,JDO等ORM框架。Hibernate是具体的ORM框架,也可以是JPA的一个实现Jpa和hibernate是接口规范和实现之间的关系,Jpa提供的注解和hibernate提供的注解功能大部分重合,现在hibernate中等价的注解都已经@deprecated了Jpa相关的类在javax.persistence

包下Hibernate

环境配置Hibernate分发包目录如图:manual很全的官方文档虽写着4.3.1.Final版,但是是3.x版的不少错误和过时的说法,只能“参考”lib目录下是相关jar文件project目录下是源码project/etc各种配置文件的模板需要的jar文件Hibernate分发包中的五个目录下,除了slf4j-api-x.jar日志框架:数据库驱动日志框架mysql数据库驱动Hibernate

环境配置到目录下拷贝如下两个文件到项目源码目录中Hibernate应用组成DDL(可选)—sql,hibernate可以通过持久化类生成数据库表POJO(plain

object

java

obiect)—持久化类Id需映射属性的get/set方法空参构造方法Hibernate配置文件—hibernate.cfg.xml

or

perties创建对象-关系映射—注解or

.hbm.xml通过Hibernate

API

访问数据库的代码Hibernate项目结构Hibernate开发步骤—DDL创建表和实体类可以有如下两种选择:一、只创建实体类,由hibernate帮助生成表结构二、先创建表,再创建实体类(持久化类)本课程前四章使用第一种方式其余章节使用第二种,第二种方式可以通过eclipse的一个插件——hibernatetool来实现,myeclipse也有这个功能Hibernate开发步骤—POJO(1)@MappedSuperclasspublic

abstract

class

BaseEntity

{@GeneratedValue(strategy=GenerationType.AUTO)@Idprivate

Integer

id;----getter和setter注解方式有诸多优点:很好的智能提示映射信息和java类在一起更易维护注解可以极少,约定大于配置本例使用注解的方式,由于每个实体类都有id,所以统一提出BseEntity抽象父类,其中只有id@Entity@Table(name="users")public

class

User

extendsBaseEntity

{private

String

userName;private

String

userAddress;private

Integer

userAge;----getter和setterHibernate开发步骤—配置文件(hibernate-cfg.xml)<!DOCTYPE

hibernate-configuration

PUBLIC"-//Hibernate/Hibernate

Configuration

DTD

3.0//EN""

"><hibernate-configuration><!--2个注意点,这里的name必须删除,否则报错,mysql的url后边的参数不能少,否则乱码--><session-factory

name="foo"><property

name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><propertyname="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_demo1?CharSet=utf8&useUnicode=true&characterEncoding=utf-8&autoReconnect=true</property><!--设定mysql的方言,使用InnoDB的存储引擎,支持事务--><property

name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property><property

name="hibernate.connection.username">root</property><property

name="hibernate.connection.password">123456</property><!--如果数据库中没有和实体类中对应的表,则创建,如果表结构不匹配,则修改表结构--><property

name="hibernate.hbm2ddl.auto">update</property><!--当前线程保存唯一的一个Session,与spring整合时不可以配置这一项--><property

name="hibernate.current_session_context_class">thread</property><!--显示生成的sql--><property

name="hibernate.show_sql">true</property><!--格式化生成的sql--><property

name="hibernate.format_sql">true</property><!--添加实体类--><mapping

class="com.oracle.wdp.hibernate.entitys.User"/></session-factory></hibernate-configuration>Hibernate开发步骤—配置文件(hibernate-cfg.xml)hibernate.hbm2ddl.auto属性可以配置的值:validate:加载hibernate时,验证创建数据库表结构create:每次加载hibernate,重新创建数据库表结构,会导致数据库表数据丢失create-drop:加载hibernate时创建,退出时删除表结构(调用

SessionFactory的close方法时)update:加载hibernate自动更新数据库结构在生产环境中不要配置,否则有破坏原来表结构的风险Hibernate开发步骤—配置文件(perty)###

set

log

levels

-

for

more

verbose

logging

change

'info'

to

'debug'

###log4j.rootLogger=warn,

stdout###

direct

log

messages

to

stdout

###log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.Console.Threshold=tracelog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE}

%5p

%c{1}:%L

-

%m%n###

log

JDBCbind

parameters

###.hibernate.type=trace.hibernate.type=debug###

log

schema

export/update

###.hibernate.tool.hbm2ddl=debug.hibernate.tool.hbm2ddl.SchemaUpdate=debug显示生成的sql绑定的参数,显示create

table语句Hibernate开发步骤—API应用步骤创建hibernate配置,读取Hibernate配置文件及信息用读取的配置信息生成SessionFactory对象从SessionFactory对象获取一个Session对象用Session对象生成事务通过Session对象的方法进行操作提交或回滚事务释放session

and

session

factory资源Hibernate开发步骤—使用API(1)@Testpublic

voidtest()

throws

ClassNotFoundException,

SQLException

{//step1:

创建配置Configurationconfiguration

=new

Configuration().configure()//通过这个设置字段和表名id=>id,

userName=>user_name//约定大于配置.setNamingStrategy(new

ImprovedNamingStrategy());ServiceRegistry

serviceRegistry

=

new

StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();//step2:构造SessionFactorySessionFactory

sessionFactory=

configuration.buildSessionFactory(serviceRegistry);//step3:取得Session对象Session

session

=

sessionFactory.getCurrentSession();//step4:启动事务Transaction

tx

=

session.beginTransaction();Hibernate开发步骤—使用API(2)User

user

=

new

User();user.setUserName("zz");user.setUserAddress("beijing");user.setUserAge(21);//step5:持久化对象

session.save(user);//step6:提交事务

mit();//注意:通过Session#getCurrentSession()取得的Session//在commit()时自动关闭了,不要调用:session.close();sessionFactory.close();}Hibernate开发步骤—运行结果控制台输出日志:create

table、insert、绑定参数17:04:25,479

DEBUG

SchemaUpdate:226

-

create

table

users

(id

integer

notnullauto_increment,

user_address

varchar(255),

user_age

integer,

user_namevarchar(255),

primary

key

(id))

type=InnoDB17:04:25,584

INFO

SchemaUpdate:242

-

HHH000232:

Schema

update

completeHibernate:insertintousers(user_address,

user_age,

user_name)values(?,

?,

?)17:04:25,789

TRACE

BasicBinder:81

-

binding

parameter

[1]

as

[VARCHAR]

-

[beijing]17:04:25,790

TRACE

BasicBinder:81

-

binding

parameter

[2]

as

[INTEGER]

-

[21]17:04:25,791

TRACE

BasicBinder:81

-

binding

parameter

[3]

as

[VARCHAR]

-[zz]Hibernate核心APISession

是数据连接与事务管理间的中间接口,它是非线程安全的,所以一个线程只创建一个Session对象。beginTrasaction()/close()/delete()/get()/load()/save(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论