hibernate总结:
1、ORM映射。
对象模型和关系模型的映射关系。也就是说,哪个类对应哪个表,哪个属性对应哪个列。而我们做持久层的目的就是完成对象模型和关系模型的数据转换。
2、hibernate优点和缺点。
优点:
Hibernate是一种开放源代码的对象/关系映射持久层框架
事务处理,生命周期管理不依赖于J2EE容器
解决数据库的方言问题
hibernate只需要操作对象就可以完成数据库的增、删、改、查操作。使用hibernate更面向对象
轻量级、无侵入性,移植性很好
缺点:
不适用于批量对对象进行操作时
不能使用数据库特定映射
表间关系很复杂时,会造成性能问题
3、hiberante环境的搭建
4、hibernate的编码。SessionFactory、Session、Query接口的使用。事务的开启、回滚、提交。
5、主键生成策略。
increment:由hibernate来生成主键。数据库可以不是自动增长列,不能用于集群。
identity:利用DB2、sqlserver、mysql的自动增长列来产生主键。
sequence:利用oracle的序列产生主键。
uuid:利用UUID算法产生字符串主键。
native:根据方言描述,来决定采用identity或sequence产生主键。
foreign:使用另一个表的主键,作为当前表的主键。用于一对一的主键关联。
6、对象状态
瞬时状态:对象是新建的。数据库中没有相关的记录,不受sesion管理。
持久状态:数据库中有相关记录,受session管理。对象数据和数据库数据随时同步。
游离状态:当session一提交,数据库中有相关记录。但该对象不受session管理。
7、原生SQL查询,利用SqlQuery接口查询,使用SQL语句来查询,用于比较复杂的查询。
8、HQL查询,利用Query接口查询,利用实体类、属性来查询数据。
9、get和load的区别。
get:立即加载,无论是否使用都发出sql语句作查询。如果主键不存在时,返回null
load:延迟加载,不立即发出sql语句查询,要使用时,再发出SQL语句查询。如果主键不存在,抛出异常。
10、HQL查询中参数绑定的两种方式(参数名称:name
参数位置?,从0开始)
参数名称:
Queryquery=session.createQuery(
“from Useruser where user.name=:customername ”);
query.setString("customername","张三");
参数位置:
Queryquery=session.createQuery(
“from Useruser where user.name=? ”);
query.setString(0,"张三");
11、HQL查询中的分页。
Query query = session.createQuery("fromUserInfo");
//设置起始条数,第一条从0开始。
query.setFirstResult(0);
//设置显示条数
query.setMaxResults(2);
12、hibernate的实体映射
一对一(主键关联(一个表的主键同时又是另一个表的外键,没有专门的外键列),外键关联(有专门的外键列,是唯一的,是一对多的特例))一般使用外键关联,外键可以设置为null,但主键不行。
一对多、多对多
13、掌握cascade和inverse区别。
cascade类似数据库的级联操作,主表记录更改或删除,从表记录是否做相应的操作。维护是记录。
inverse控制反转。如果为true。表示在插入当前对象时,不插入外键,外键的维护由另一方完成。一般设置在一方,外键关系一般由多方维护,维护的是外键。
14、一级缓存和二级缓存的区别。
一级缓存:(事务级缓存)是基于 Session的生命周期实现的,session一旦关闭,一级缓存就清除,一级缓存为hibernate自带的缓存,是必需的。
二级缓存:(应用级缓存)即在某个应用中或应用中某个独立数据库访问子集中的共享缓存,此缓存可由多个事务共享.在Hibernate中,应用级缓存由SessionFactory实现
15、二级缓存的产品EHcache、Oscache。及相关的配置。查询缓存是针对查询出的集合进行缓存,由于条件不一致导致集合内容不一致,利用率不高。
16、延迟加载的概念。分为对象延迟加载(load),集合延迟加载(一对多、多对多的关联集合),属性延迟加载(clob大数据使用时)
17、连接池的概念及工作原理。(c3p0、dbcp、proxool)
传统的持久层操作中,每一次请求都要建立一次数据库连接,使用完后都得断开,以释放内存资源。频繁的数据库连接操作势必导致流操作过多,占用很多的系统资源,从而导致响应速度下降。而且不能控制被创建的连接对象数,导致系统资源被毫无顾及的分配出去,最终可能导致服务器内存崩溃。
而连接池就是为数据库连接建立一个“缓冲池”。预先在连接池中放入一定数量的连接,当需要建立数据库连接时,只需从连接池中取出一个,使用完毕之后再放回去。由于连接一直不关闭从而减少了流操作,同时可以设置最大连接数来控制所建立的连接数量,防止服务器内存崩溃。
工作流程:当持久层需要一个连接对象时,先去连接池中寻找空闲连接。找到后,将连接对象状态设置为忙碌;用完后,放回连接池后,又将连接对象状态设置为空闲。
如果连接池中没有空闲连接,则检查连接池是否到达最大连接数。如果没有到达最大连接池,则创建新连接并分配给请求的用户;如果达到了最大连接数,则等待一段时间。在等待时间内如果有连接被释放,则分配给等待用户。如果在等待时间结束后,还没有连接释放,则返回null。
18、锁机制:当多个用户同时存取或查询数据时,在一个用户操作时保证数据不被别的用户修改。
悲观锁:一个用户操作记录时不允许别的用户进行操作。类似于线程同步。效率低,适合短事务。
乐观锁:通过版本控制器实现,一个用户操作时,会记录版本号,在提交时,会检查版本号和记录版本号是否一致。如果一致,则提交,并将版本号加一;如果不一致,需要重新下载新的记录。