hibernate总结Word文档下载推荐.docx
- 文档编号:8485834
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:52
- 大小:51.16KB
hibernate总结Word文档下载推荐.docx
《hibernate总结Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《hibernate总结Word文档下载推荐.docx(52页珍藏版)》请在冰点文库上搜索。
它支持很多关系型数据库,从一对一到多对多的各种复杂关系
*Hibernate本身性能并不是很好,存在很多优化手段(一级缓存、二级缓存、查询缓存、抓取策略)
二、使用Hibernate框架快速入门
1、去下载hibernate3开发包
hibernate是JBOSS框架,JBOSS是EJB服务器,JBOSS推出JBPM工作流
企业主流Hibernate版本:
hibernate3.x
课程以hibernate3.6.10讲解
最新hibernate版本4.3测试版,hibernate4和hibernate3开发有很多不同
*****hibernate还有很多扩展技术search、validator....
下载hibernate-distribution-3.6.10.Final-dist.zip
2、目录结构
documentation:
文档
lib:
开发jar包
project:
hibernate源码
hibernate3.jar:
hibernate框架开发核心jar包
3、导入jar包
hibernate3.jar核心jar包
lib/required/*.jar
lib/jpa/hibernate-jpa-2.0-api-1.0.1.Final.jar(用于jpa注解开发,web开发)
数据库驱动:
mysql驱动
hibernate3.x版本默认采用日志技术slf4j(即简单日志门面(SimpleLoggingFacadeforJava)),不是具体的日志解决方案,它只服务于各种各样的日志系统。
*使用slf4j好处,很容易整合其他日志技术
企业java开发最主流日志技术log4j
slf4j-api-1.6.1.jar没有日志实现,只是接口,整合log4j
导入slf4j-log4j12-1.7.2.jar(slf4j对log4j框架整合)
导入log4j-1.2.16.jar(log4j的日志jar包)
log4j是企业主流日志技术,是Apache公司提供的
1)什么是日志技术,开发中为什么要用日志技术
日志:
在系统运行过程中,记录关键信息,记录错误异常信息的技术
*区分System.out和日志技术
*System.out向控制台输入信息,一定输出
*日志技术存在级别,通过级别控制日志是否输出,输出的详细程度,输出的目的地(控制台、文件、发送邮件)
使用日志:
主要用于开发过程中调试和项目上线后的维护(记录bug)
2)使用log4j通过配置文件,配置日志框架使用
src/log4j.xml
src/log4j.properties(简单)
配置log4j.properties有三个组件
组件一:
记录器(Loggers)用来配置日志输出级别,使用哪些输出源格式:
记录器名=级别,输出源1,输出源2...
*一个记录器指定多个输出源
log4j.rootLogger=info,stdoutinfo是日志级别,stdout是输出源名称
*log4j提供日志级别由高到低:
fatal(致命错误),error(普通错误),warn(警告),info(信息),debug(调试),trace(堆栈)
*log4j记录日志时,只会记录配置级别更高级别的信息
组件二:
输出源(Appenders)在log4j中可以定义多个输出源(控制台、日志文件、邮件、数据库)
*log4j.appender.输出源名称=实现类
log4j.appender.stdout=org.apache.log4j.ConsoleAppender向控制台输出
log4j.appender.file=org.apache.log4j.FileAppender向文件输出
组件三:
布局(Layouts)在日志中都记录哪些信息
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout自定义布局
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE}%5p%c{1}:
%L-%m%n自定义布局格式
3)、在程序中使用log4j记录日志
步骤一:
定义记录器
privatestaticfinalLoggerLOG=Logger.getLogger(Log4jTest.class);
步骤二:
使用log4j提供每个级别方法记录日志
LOG.fatal("
致命错误"
);
LOG.error("
普通错误"
LOG.warn("
警告信息"
LOG.info("
普通信息"
LOG.debug("
调试信息"
LOG.trace("
堆栈信息"
*常用:
error、warn、info、debug
4、编写数据表和实体类
createtablecustomer(
idintprimarykeyauto_increment,
namevarchar(20),
ageint,
cityvarchar(20)
publicclassCustomer{
privateintid;
privateStringname;
privateintage;
privateStringcity;
...
}
hibernate完全ORM,只需要操作Customer类对象,自动生成SQL操作customer表
*需要为实体类和数据表进行关系映射配置
1)在类所有包,创建类名.hbm.xml文件(Customer.hbm.xml)
2)hibernate3.jarorg/hibernate/hibernate-mapping-3.0.dtd
配置属性到列映射时,指定类型,类型有三种写法
第一种java类型java.lang.String
第二种hibernate类型string
第三种SQL类型varchar(20)
5、配置hibernate核心配置文件
在src下创建hibernate.cfg.xml
规则参见hibernate3.jar/org/hibernate/hibernate-configuration-3.0.dtd
配置hibernate基本属性,参考解压目录/project/etc/hibernate.properties
1)JDBC连接属性
2)数据库方言
3)其它属性
4)加载hbm映射文件
6、编程操作hibernate框架(模板)
//实例化配置对象,加载配置文件hibernate.cfg.xml
Configurationconfiguration=newConfiguration().configure();
//创建会话连接工厂
SessionFactorysessionFactory=configuration.buildSessionFactory();
//创建会话
Sessionsession=sessionFactory.openSession();
//开启事务
Transactiontransaction=session.beginTransaction();
...这里可以编写hibernate操作代码逻辑(********************************************************)
//提交事务,释放资源
mit();
session.close();
sessionFactory.close();
7、完成customer表增删改查操作
1)使用session对象save方法完成insert操作
session.save(customer);
2)使用session对象get或者load完成根据id查询
(Customer)session.get(Customer.class,id);
3)使用session对象update方法完成修改操作
session.update(customer);
根据id修改其它所有字段内容(防止修改为null的情况)
4)使用session对象delete方法完成删除操作
session.delete(customer);
根据id删除
5)查询所有数据
Session对象提供了两个方法可以获得Query对象---完成查询
QuerycreateQuery(StringqueryString)接受HQL
SQLQuerycreateSQLQuery(StringqueryString)接受SQL
*createQuery返回Query对象,接收HQL查询语言(HibernateQueryLanguage)----语法类似SQL,面向类和属性的查询
*使用HQL查询,面向类和属性,生成底层SQL返回结果封装类对象中
*使用SQL查询,面向数据表,SQL无需生成,默认返回结果每条记录Object[]-------通过addEntity(Customer.class)指定将返回数据封装对象
三、Hibernate核心配置和核心API
1、hibernate体系结构
hibernate位于应用程序和数据库之间,将数据库底层完全封装,应用程序只需要操作PersistentObjects(持久化对象),通过Hibernate生成SQL语句,完成对数据表中记录的操作
hibernate支持两种核心配置文件
src/hibernate.properties(key-value文件键值对,主要配置hibernate基本属性)
hibernate.connection.driver_class=com.mysql.jdbc.Driver
src/hibernate.cfg.xml(完成基本属性配置,加载hbm映射文件)
<
propertyname="
hibernate.connection.driver_class"
>
com.mysql.jdbc.Driver<
/property>
mappingresource="
cn/itcast/domain/Customer.hbm.xml"
/>
加载hbm映射
*hibernate.properties无法加载hbm映射,采用properties方式,必须手动编程加载hbm文件或者持久化类
2、hibernate的常用属性
必须属性
hibernate.dialect操作数据库方言
hibernate.connection.driver_class连接数据库驱动程序
hibernate.connection.url连接数据库URL
hibernate.connection.username数据库用户名
hibernate.connection.password数据库密码
可选属性
hibernate.show_sqltrue在控制台上输出SQL语句
*hibernate自己完成的,并没有使用日志系统,当关闭日志后,控制台仍然有SQL语句
hibernate.format_sqltrue格式化控制台输出的SQL语句
*SQL会自动换行,对于比较长的sql查看方便
hibernate.hbm2ddl.autocreate/create-drop/update/validateDDL策略
*DDL主要建表语句,和表结构更新语句
create:
表示启动的时候先drop,再create(测试人员准备标准测试数据)
create-drop:
也表示创建,只不过再系统关闭前执行一下drop(测试程序是否正确)
update:
这个操作启动的时候会去检查schema是否一致,如果不一致会做scheme更新(建表,更新表结构【只能加】)
validate:
启动时验证现有schema与你配置的hibernate是否一致,如果不一致就抛出异常,并不做更新
***在产品开发中update和validate使用较多
hibernate.connection.autocommittrue事务是否自动提交
*用于解决没有开启事务的操作时,事务如何自动处理
*默认事务自动回滚
3.Hibernate核心API
1)Configuration
加载hibernate.properties和hibernate.cfg.xml持久化类与数据表的映射关系(*.hbm.xml文件)创建Configuration的两种方式属性文件(hibernate.properties):
Configurationcfg=newConfiguration();
//手动加载hbm
Xml文件(hibernate.cfg.xml)
Configurationcfg=newConfiguration().configure();
2)SessionFactory
一个SessionFactory实例对应一个数据存储源。
应用从SessionFactory中获取Session实例。
a它是线程安全的,这意味着它的一个实例能够被应用的多个线程共享。
b它是重量级的,这意味着不能随意创建或者销毁,一个数据库只对应一个SessionFactory。
通常构建SessionFactory是在某对象Bean的静态初始化代码块中进行。
如果应用只是访问一个数据库,只需创建一个SessionFactory实例,并且在应用初始化的时候创建该实例。
如果应用有同时访问多个数据库,则需为每个数据库创建一个单独的SessionFactory。
3)Session
是Hibernate应用最广泛的接口。
它提供了和持久化相关的操作,如添加,删除,更改,加载和查询对象。
a它是线程不安全的,因此在设计软件架构时,应尽量避免多个线程共享一个Session实例。
b.Session实例是轻量级的,这意味着在程序可以经常创建和销毁Session对象,
例如为每个客户请求分配单独的Session实例。
原则:
一个线程一个Session;
一个事务一个Session。
Transaction接口:
是Hibernate的事务处理接口,它对底层的事务接口进行封装。
4)Transaction
5)Query
Query实例包装了一个HQL查询语句。
6)Criteria
Criteria接口完全封装了基于字符串形式的查询语句,比Query接口更面向对象。
Criteria更擅长于执行动态查询。
四、hbm映射文件配置(持久化配置和操作)
1、持久化对象PersistentObject
PO=POJO+hbm映射配置
编写规则:
1)提供一个无参数public访问控制符的构造器
2)提供一个标识属性,映射数据表主键字段
3)所有属性提供public访问控制符的setget方法
4)标识属性应尽量使用基本数据类型的包装类型
5)不要用final修饰(将无法生成代理对象进行优化)
面试题:
理解Session的get方法与load方法区别
session.get方法,查询立即执行,返回Customer类对象
session.load延迟加载数据,不会立即查询,返回Custer类的子类对象(动态生成代理对象)
*所以PO类不能使用final修饰
2、理解OID
Hibernate使用OID来建立内存中的对象和数据库中记录的对应关系
3、区分自然主键和代理主键
4、使用数据的包装类型-----null
id>
<
generatorclass=“主键策略”/>
/id>
主键:
在关系数据库中,主键用来标识记录并保证每条记录的唯一性(一般可保证全数据库唯一)。
必须满足以下条件:
1)不允许为空。
2)不允许主键值重复。
3)主键值不允许改变。
1.自然主键:
以有业务含义的字段为主键,称为自然主键。
优点:
不用额外的字段。
缺点:
当业务需求发生变化时,必须修改数据类型,修改表的主键,增加了维护数据库的难度。
2.代理主键:
增加一个额外的没有任何业务含义的一般被命名为ID的字段作为主键。
增加了额外字段,占用部分存储空间。
提高了数据库设计的灵活性。
Hibernate用对象标识(OID)来区分对象:
Studentstu=(Student)session.load(Student.class,101);
//这代码加载了OID为101的Student对象
Hibernate推荐使用代理主键,因此Hibernate的OID与代理主键对应,一般采用整数型,包括:
short、int、long。
5、hbm文件配置
配置类到制定数据库中表的映射<
classname=table=...>
配置类中中OID属性到表主键映射<
idname=column=type=>
***配置主键生成策略
<
generatorclass="
..."
配置普通属性的映射
<
property...>
其他属性
6、主键生成策略
generator节点中class属性的值:
1)assigned:
assigned:
由用户自定义ID,无需Hibernate或数据库参与。
是<
generator>
元素没有指定时的默认生成策略。
idname="
id"
column="
assigned"
2)hilo:
通过hi/lo(高/低位)算法生成主键,需要另外建表保存主键生成的历史状态(这表只需要一个列和高位初始值)。
hi/lo算法产生的标识只在一个特定的DB中是唯一的。
所有数据库都可用。
如果同一个数据库里多张表都需要用;
可以建多张主键表,也可以共用同一字段,但最好是用同一张主键表的不同字段。
hilo"
paramname="
table"
high_val<
/param>
!
--指定高位取值的表-->
column"
nextval<
--指定高位取值的列-->
max_lo"
5<
--指定低位最大值,当取到最大值是会再取一个高位值再运算-->
/generator>
3)sequence:
采用数据库提供的Sequence机制。
Oracle,DB2等数据库都提供序列发生器生成主键,Hibernate也提供支持。
sequence"
序列名<
4)seqhilo:
功能同hilo,只是自动建表保存高位值。
主键生成的历史状态保存在Sequence中。
只能用于Oracle等支持Sequence的数据库。
high_val_seq<
5)increment:
主键按数值顺序递增。
作用类型:
long,short,int
使用场景:
在没有其他进程同时往同一张表插数据时使用,在cluster下不能使用
6)i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- hibernate 总结
![提示](https://static.bingdoc.com/images/bang_tan.gif)