为了账号安全,请及时绑定邮箱和手机立即绑定

Oracle:Hibernate入门

标签:
Oracle

Hibernate入门
一:Hibernate框架简介
(1.)Hibernate框架:是数据持久化工具,也是一个开放源代码的ORM解决方案。Hibernate内部封装的了通过JDBC访问数据库的操作,向上层应用提供面向对象的数据访问API。
(2.)Hibernate是ORM解决方案。
(3.)Hibernate框架的优点:
1.Hibernate功能强大,是JAVA应用与关系数据库之间的桥梁,较之JDBC方式操作数据库,代码量大大减少,提高了持久化代码的开发速度,降低了维护成本。
2.Hibernate支持许多面向对象的特性,如组合,继承,多态,使得开发人员不必在面向业务领域的对象模型和面向数据库的关系数据之间的模型切换,方便开发人员进行领域驱动的面向对象的设计与开发。
3.可移植性好,
4.框架开源免费
缺点:
1. 不适合以数据为中心大量使用存储过程的应用。
2. 大规模的批量插入,修改和删除不适合用Hibernate。
(4.)Hibernate和Mybatis的比较:
1.相对于Mybatis的‘SQL-Mapping’的ORM实现,Hibernate的ORM实现更加完善,提供了对象状态管理功能。Hibernate是对数据库操作,针对的是JAVA对象,即使使用Hibernated查询语言,其书写规则也是面向对象的。
2.Hibernate与具体数据库的关系只需要在XML中配置即可,hibernate开发者不需要关注SQL的生成与结果的映射,所有的HQL语句与具体的数据库无关,便于修改,移植性好。而Mybatis直接使用SQL语句,不同数据库可能会有差异,修改工作量大,可移植性差。
3.由于直接使用SQL语句,所有MyBtais的使用灵活性高,而Hibernate对于关系模型设计不合理,不规范系统不适用。在不考虑缓存的情况下,MyBatis执行效率也比较Hibernate高一些。
二:Hibernate环境搭建:
(1.)Hibernate环境搭建:
1.下载需要的jar文件:Hibernate官方网站是:http://hibernate.org。托管网站是:https://sourceforge.net/projects/hibernate/files/下载。推荐下载hibernate3
2.部属jar文件
3.创建Hibernate配置文件hibernate.cfg.xml。
4.创建持久化类和映射关系文件。
(2.)主键生成策略:
1.Assigned:主键由程序负责生成,
2.Increment:对类型为long,short或者int的主键,以自动生长方式生成主键的值,主键按数值顺序递增,增长量为1。
3.Identity:对如,SQL server,DB2 ,MySQL等支持表识列的数据库,可使用该主键的值生成策略生成自动增长主键,但在数据库中将相应的主键字段设置为表识列。
4.sequence:对如Oracle Db2等支持序列的数据库,可使用主键生成策略生成自动曾增长主键,通过子元素param可传入数据库中序列的名称。
5.Native:由Hibernate根据底层数据库自行判断采用何种主键生成策略,即由使用数据库生成主键的值。
三:使用Hibernate完成持久化操作
(1.)读取并解析配置文件及映射文件。
Configuration conf=new Configuration().configure();
(2.)依据配置文件和映射文件中的信息,创建SessionFactory对象。
SessionFactory sf=conf.buildSessionFactory();
(3.)打开Session
Session session =sf.getCurrentSession();//或者使用:sf.openSession();
(4.)开始一个事务
Transaction tx=session.benginTransaction();
(5.)数据库操作
Session.save(user);//保存操作
(6.)结束事务
Tx.commit();//提交事务

Tx.rollback();//会滚事务
(7.)如果通过SessionFactory的openSession()方法获取的Session对象,则需要关闭session。
Session.close();

8.get()和load()区别:当使用Session的get()方法时,如果加载的数据库不存在,get()方法会返回一个null;但是使用load()方法,若加载的数据库不存在,则会抛出异常。这是get()和load()方法的区别之一。
四:Hibernate中java对象的三种状态
1.Java对象的三种状态
(1.)顺时状态(Transient)又称(临时状态)
(2.)持久状态(Persistent):当对象与Session 关联,被Session管理时,它就处于持久状态。
(3.)游离状态(Detached)又称(托管状态)
2.三种状态的转换
(1.)瞬时状态转换持久状态
使用Session的save(),saveOrUpdate()等方法保存对象后。

Session的get()或load方法获取对象。
(2.)持久状态转换为瞬时状态
执行Session的delete()方法后。
(3.)持久状态转换为游离状态
执行Session的evict(),clear()或close方法。
(4.)游离转换为持久状态
Session 的update()或saveOrUpdate()方法。
(5.)游离状态转换为瞬时状态
Session的delete()方法
五:脏检测及刷新缓存机制
(1.) 脏检测:在Hibernate中,数据前后发生的变化对象,称为脏对象。
(2.)刷新缓存机制:当Session缓存中对象的属性发生变化时,Session并不会立即执行脏检查和执行相关的SQL语句,而是在特定的时间点,即刷新缓存时才执行。
Session 会在一下时间点刷新缓存
(1.)应用程序显示调用Session 的flush()方法时。
Session的flush()方法进行刷新缓存操作,会触发脏检查,视情况执行相关的SQL语句。
(2.)应用程序调用Transaction 的commit()方法时。
Commit()方法先调用Session 的刷新缓存方法flush(),然后向数据库提交事务。
六:跟新数据的方法
(1.)update()方法,用于将游离状态恢复为持久状态,同时进行数据库更新操作,当参数对象OID为Null时会报异常。
(2.)saveOrUpdate()方法,同时包含了save()与update()方法的功能,如果入参是瞬时状态的对象,就调用save ()方法,如果入参是游离状态的对象,则调用update()方法。
(3.)merge()方法,能够作为参数传入的游离状态对象的属性复制到一个拥有相同OID的持久状态对象中,通过持久状态的脏检查实现跟新操作,并返回该持久状态对象,如果无法从Session缓存或数据库中加载到相应的持久状态对象,即传入瞬时对象,则创建其副本执行插入操作,并返回这一新的持久状态对象。

点击查看更多内容
4人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
40
获赞与收藏
344

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消