参考文章:
http://apps.hi.baidu.com/share/detail/1192410
http://www.mianwww.com/html/category/it-interview/hibernate
一、hibernate的缓存机制:
二、hibernate的三种状态转换:
三、hibernate的工作原理:
原理:
1. <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="font-size: 10pt; font-family: Arial; color: #000000; ">读取并解析配置文件</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
2. <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="font-size: 10pt; font-family: Arial; color: #000000; ">读取并解析映射信息,创建SessionFactory</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
3. <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="font-size: 10pt; font-family: Arial; color: #000000; ">打开Sesssion</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
4. <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="font-size: 10pt; font-family: Arial; color: #000000; ">创建事务Transation</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
5. <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="font-size: 10pt; font-family: Arial; color: #000000; ">持久化操作</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
6. <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="font-size: 10pt; font-family: Arial; color: #000000; ">提交事务</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
7. <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="font-size: 10pt; font-family: Arial; color: #000000; ">关闭Session</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
8. <wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="font-size: 10pt; font-family: Arial; color: #000000; ">关闭SesstionFactory</span></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
hibernate2.x版本中,lazy默认值是“false”,但hibernate3.x已经将lazy的默认改为“true”了
五、为什么用hibernate:
1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作
3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。
七、load()和get()的区别:
两加载方法区别:
Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象。 其区别在于:
1.如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个ObjectNotFoundException。
2.Load方法可返回实体的代理类实例,而get方法永远直接返回实体类。
3.load方法可以充分利用内部缓存和二级缓存中的现有数据,而get方法则仅仅在内部缓存中进行数据查找,如没有发现对应数据,将越过二级缓存,直接调用SQL完成数据读取。
4.load支持延迟加载,get不支持延迟加载。
总 结: load和get都会先去session缓存中查找是否存在该对象,存在返回,不存在时,get方法就直接去数据库中查询并返回,而load是先创建一个对象保存于session缓存中,待真正用到的时候才去查询数据库,即load支持延迟加载,get不支持;
八、 在数据库中条件查询速度很慢的时候,如何优化?
1.建索引
2.减少表之间的关联
3.优化sql,尽量让sql很快定位数据,不要让sql做全表查询,应该走索引,把数据量大的表排在前面
4.简化查询字段,没用的字段不要,已经对返回结果的控制,尽量返回少量数据
九、hibernate的查询方式:
十、hibernate的update和saveOrupdate的区别:
未完,待续.....