hibernate总结
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate总结相关的知识,希望对你有一定的参考价值。
hibernate:
1.hibernate的工作原理.
1.通过configuration,类加载hibernate的主机配置文件
2.创建sessionFactory文件
3.由sessionFactory对象打开一个一个session对象.
4.由session完成curd操作。如果是增删改还需要transcation类的支持,事务的开始begin,事务的提交
commit,事务的回滚rollback。如果查询 hql,sql,qbc每一种返回对象不一样,query,crieria,
querysql.
5.session关闭.
2.说说hibernate的缓存.
持久化框架
hibernate的缓存分为一级缓存和二级缓存。
一级缓存称为session缓存,session内置不能被卸载,session的缓存是事务的范围,一级缓存中,持久化类的每个实列都具有唯一的oid.
一级缓存中,缓存的销毁可以通过session.evict方法来进行清除。
二级缓存又分为:内置缓存:数据存放在内存中。
外置缓存:数据存放在内存,硬盘,Io等介质中。
二级缓存:Hibernate二级缓存也称为进程级的缓存或SessionFactory级的缓存。二级缓存是全局缓存,它可以被所有的session共享。
在执行各种条件查询时,如果所获得的结果集为实体对象的集合,那么就会把所有的数据对象根据ID放入到二级缓存中。
当Hibernate根据ID访问数据对象的时候,首先会从Session一级缓存中查找,如果查不到并且配置了二级缓存,那么会从二级缓存中查找,
如果还查不到,就会查询数据库,把结果按照ID放入到缓存中。
删除、更新、增加数据的时候,同时更新缓存。
还有就是经常要修改的数据不能放在缓存中,对敏感数据,如金融,银行等不能有缓存。游戏等可以有缓存。
降低应用程序访问数据库的频率,从而提高应用系统的性能。
二级缓存:1.需要在主配置文件中配置三个属性(默认二级缓存是关闭的,需要开启缓存)
2.需要在原数据中配置cache标签:<cache:usage="read-only">cache隔离级别
3.二级缓存的生命周期依赖于sessionfactory对象的生命周期,sessionfactory关闭后或销毁后,缓存的数据随之销毁。也可以手动调用evict方法清除某一个对象的缓存。
3.hibernate的检索方式有哪些
get立即检索 lazy=false,load延迟检索 lazy=true,外链接检索 fetch=join。批量检索
导航对象图检索方式(根据已经加载的对象,导航其他对象)
oid检索方式(按照对象的oid来检索)
hql检索方式(使用面向对象的hql查询语言)
qbc检索方式(qbc(query bycriteria)apl来检索对象)
本地sql检索方式(使用本地数据库的sql查询语句)
4.hibernate主键生成的策略有哪些, 各有什么特色.
1.assigend表示在调用sava(),必须手动对主键进行复制,否则抛异常。
2.increment 按主键的顺序进行生成数据,与底层数据没关系。
3.identity根据底层数据库的主键生成策略去生成主键的值,orcal中不支持,mysql sqlservlet db2支持。
4.sequence 根据底层数据的主键生成策略去生成主键值,mysql不支持orcal db2支持
5.native 根据底层数据库自动判断采用:identity hilo squence 其中一种作用主键生成方式,去生成主键值。
6.hilo高地位算法,跟数据库无关
7.uuid 生成16进制长度为32为的字符串,号称唯一与底层数据无关。
8.foregin外键生成:主键的值根据主表的引用自动去生成。
5.load()和get()的区别是什么.
相同点:都是通过主键id查询当前行数据,返回一行的数据。
同一个session下,共享同一个查询的结果。
两个session都要查询,都需要查询不能分享。
不同点:1.get是立即加载, load是懒加载,并且是一个代理对象去查询。
2.查询的主键不存在 get查询返回null ,load查询返回,objectnotfoundexception异常。
6.hibenate的二级缓存的特点.
二级缓存:1.需要在主配置文件中配置三个属性(默认二级缓存是关闭的,需要开启缓存)
<propertyname="cache.provider_class"></property> provider_class
<property name="cache.use_query_cache">true</property> 查询缓存
<property name="cache.use_second_level_cache">true</property> 二级缓存
2.需要在原数据中配置cache隔离级别标签:<cache:usage="read-only">cache隔离级别
3.二级缓存的生命周期依赖于sessionfactory对象的生命周期,sessionfactory关闭后或销毁后,缓存的数据随之销毁。也可以手动调用evict方法清除某一个对象的缓存。
jdbc:
1.mysql和oracle的端口
mysql:3306 orcal:1521
2.mysql分页, oracle如何分页;
limit分页; rownum分页;
mysql: select* from 表名 limit start 开始是的下标,每页显示的数量
ps: select * from student limit start0,3
rownum :select * from 表名 rownum start 开始下标,每页显示的数量
ps: select * from student rownum start 0,3
3.jdbc的执行步骤.
1.加载数据库驱动cass.forname
2.创建connection连接drivermanager.getconnection();
3.通过connection statement连接对象
4.通过statement对象执行sql语句完成增删查该
5.释放资源 关闭结果集 statement connection对象
4.jdbc如何调用存储过程.
1.class.forname加载数据库驱动;
2.创建connection连接;
3.通过connection对象创建callableStatement对象;
4.设置传入的参数和注册传出参数;
5.执行sql语句,获取传出参数;
6.释放资源,关闭结果集,callableStatement对象、connection对象。
5.jdbc如何调用数据库中的视图.
一.class.forName 加载数据库驱动;
二.创建Connection连接;
三.通过Connection对象创建CallableStatement对象;
四.通过Statement 对象执行sql语句完成查询操作;
五.返回一个结果集对象,循环迭代结果集,
六.释放资源,关闭结果集,Statement,Connection对象;
6.数据库连接池的工作原理.
运用程序启动时,初始化一定数目的数据库连接,并维护不少于最小值数目的池链接,某一个事务使用链接,并把当前链接标记成忙,用完之后放回池中,并标记为空闲。
以上是关于hibernate总结的主要内容,如果未能解决你的问题,请参考以下文章