版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 楼宇自控系统托管服务合同
- 伺服电机供货协议
- 橡胶制胶工风险识别模拟考核试卷含答案
- 列车长岗前核心能力考核试卷含答案
- 汽车代驾员岗前创新应用考核试卷含答案
- 巡检无人机驾驶员操作安全知识考核试卷含答案
- 熔体镁工安全综合测试考核试卷含答案
- 玻璃制品加工工QC考核试卷含答案
- 高空作业机械操作工冲突解决考核试卷含答案
- 海藻繁育工绩效目标竞赛考核试卷含答案
- SLT 336-2025水土保持工程全套表格
- 2026年中国国新控股集团校招面试技巧与案例分析指南
- 2026受限空间作业安全培训课件
- 2026贵州农商联合银行社会招聘20人备考题库附答案详解(综合题)
- 2025国企风控合规管理岗笔试真题及答案全解析
- 2025-2026学年浙教版(新教材)初中科学八年级第二学期教学计划附进度表
- 煤矿安全监察培训制度
- 快递业务运营经理绩效评定表
- 安全联锁保护系统管理制度
- TCECS 1680-2024 消能减震楼梯应用技术规程
- 2025年注册安全工程师金属冶炼安全实务真题及答案(附解析)
评论
0/150
提交评论