Java面试之hibernate
Hibernate之我见:
Hibernate的核心思想就是ORM了,即对象到关系的映射。也就是将数据表中的数据表映射为对象,同时通过hibernate也能够把对象自动持久化到关系数据库中。hibernate主要就是充当业务逻辑层与数据库层之间的一个桥梁作用。也是对jdbc思想的一个实现吧。
具体的来说:个人觉得hibernate干了两个事情。
1. 就是hibernate将传统的MVC中的业务逻辑层进一步的进行分层。单独分出了持久化层负责数据的持久化操作。
2. Hibernate 封装了数据库的访问细节,并且维护着实体类与数据库之间的映射关系。使得业务处理程序通过Hibernate API可以进行数据库操作。
Hibernate执行流程:
大体上分为两个部分:
1. Session对象的创建。hibernate通过Configuration类的configure方法加载Hibernate配置信息,默认加载hibernate.cfg.xml文件。加载完毕后通过configuration类的buildSessionFactory方法创建SessionFactory对象。SessionFactory是一个生产session对象的工厂。当需要session对象时从此工厂中获取即可。
2. Session对象对数据进行增删改查的操作。Hibernate框架对JDBC作了轻量级的封装,使用hibernate对数据进行操作时,不需要再写繁琐的JDBC代码,完全面向对象的思维模式,其中还加入了对事务的控制。流程如:
A. 或许session对象
B. 开启事务
C. 数据操作 有异常 回滚事务 没有下一步
D. 提交事务
E. 关闭session对象
Hibernate缓存以及延迟加载
Hibernate中缓存分为两种:Session缓存和SessionFactory缓存。详见:
1. Session缓存(一级缓存)
Session级的缓存,生命周期很短,与session对应。调用session的load,get,save等方法时,hibernate会对实体对象进行缓存;当在同一个session中时再次调用时,hibernate会首先到缓存中查询,找到直接使用。就就不需要发出sql语句到数据库查询。
2. SessionFactory缓存(二级缓存)
二级缓存是sessionFactory级的缓存,生命周期与sessionFactory对应,可以在多个session之间共享。Hibernate中二级缓存需要使用相关的插件。需要进行配置。记不太清了。就是需要把使用二级缓存的属性设置为true。一般的对不是经常更新的数据进行二级缓存,如:热点新闻。 如果经常变化的话,使用二级缓存就得不偿失了。
3. Hibernate的延迟加载策略(get和load的区别)
Hibernate通过代理机制实现了延迟加载技术。也就是使用延迟加载的对象,在获取对象的时候返回的是对象的代理,并不是对象的真正引用,只有在对象真正被调用的时候,hibernate才会对其进行查询,返回真正的对象。
Hibernate的关系映射问题
1. 关联关系映射
多对一单向:
<many-to-one> 标签使用在多的一端,并使用<column >name属性一的一端的主键标识。
多对一双向:
多的一端没有变化,一的一端需要映射文件需要使用<set>标签进行映射。
<set name=”books”>
<key culume=”categoryId”>
<ont-to-many class=”Book”>
</set>
一对一主键关联:
User文件中: <one-to-one name=”idCard”>
idCare文件中:<one-to-one name=”user” constrained=”true”>
//constrained属性用于建立一个约束。
一对一外键关联:
User文件中:<many-to-one name=”idCard” unique=”true”>
多对多关联映射:
需要借助第三张表。持久化类中分别加上了set集合。
持久化配置文件为:
<set name=”course” table=”tb_studeng_course”>
<key column=”studentId”></key>
<many-to-many class=”Course” column=”courseId”>
</set>
//table用于指定第三张表。另外一张表同理。
2. 级联操作
级联操作通过cascade属性来实现。属性值可选值:none,save-update,delete,all。
3. 继承映射
有三种方法:
1. 映射成一张表
2. 每个子类映射成一张表
3. 每个具体类映射成一张表
Hibernate的hql语句查询
这块涉及到暑假库的知识,看着就闹心。数据库是一块永远的痛啊! 等以后心情好了,再看吧!
分享到:
相关推荐
Java程序员面试三十二问.doc Java经典试题及答案.doc java面试笔试题大汇总.doc 企业面试题精选.doc 9JAVA代码查错.doc jdbc.doc Struts.doc Hibernate?.doc
│ Java面试题56.ibatis和hibernate有什么不同.mp4 │ Java面试题57.hibernate对象状态及其转换.mp4 │ Java面试题58:hibernate的缓存.mp4 │ Java面试题59.webservice的使用场景.mp4 │ Java面试题60.Activiti的...
最全的j2EE面试题,题量...8、java面试题及答案 9、java面试题编程篇 10、Oracle面试题 11、Oracle企业面试题集锦 12、Spring面试题 13、SSH面试题 14、Strut+Spring+Hibernate面试题 15、张孝祥整理Java就业面试题大全
史上最全的android和java面试文档集。包括有: java程序员面试宝典.txt Java面试宝典2011版-1C,Java基础部分.doc 三大框架面试题.zip 技术面试题.zip Android笔试题库 C语言终极面试宝典.doc Java笔试题目汇总.pdf ...
2、 Hibernate ①ORM 与持久化映射 ②延迟加载、 性能优化 ③HQL 查询、 条件查询、 SQL 查询 ④二级缓存与查询缓存 3、 Struts ①MVC 模式与 Struts 体系 4、 mybatis 5、 MVC 框架 6、 各框架对比与项目优化 7、 ...
内容涵盖j2ee java struts hibernate sprint jsp
Java面试题56.ibatis和hibernate有什么不同 Java面试题57.hibernate对象状态及其转换 Java面试题58:hibernate的缓存 Java面试题59.webservice的使用场景 Java面试题60.activiti的简单介绍 Java面试题61.linux的使用...
含盖 hibernate,struts,sql,java,spring,等等 全面含盖j2ee知识。
JAVA面试题汇总;自己新加了一些面试题及答案了(主要包括:原来的JAVA面试题汇总,Hibernate十五道强攻题;还有用简单代码学习Spring:IoC、AOP。。。等等);祝大家顺利通过面试吧;机会只留给有准备的人。
Java面试题58:hibernate的缓存.mp4
1000道关于JAVA 面试题,包括Java基础框架,struts,hibernate,spring,mybatis,servlet,jsp,javascript,ajax,sql, 存储过程,函数
java面试知识点总结--Hibernate、ibates、strucs.pdf
主要内容包括面试流程及求职准备、Java语言基础、数据类型、集合框架、图形用户界面、输入与输出、多线程、反射机制、网络编程、JDBC、Web开发基础、SSH框架(Struts、Spring和Hibernate)、EJB、JPA、算法、设计...
程序员java面试题汇总 【资源介绍】 适宜人群:准备跳槽的初/中/高级 Java 程序员 想要查漏补缺的人 想要不断完善和扩充自己 Java 技术栈的人 Java 面试官 资源分为十九个模块,分别是: Java 基础、容器、多线程、...
最近面试了几家公司,都是java题,然后在面试过程中发现一般面试官会问的技术问题都可以在本文档找得到,一般会问servlet的生命周期、Struts和struts2的区别,hibernate、spring的认识、对象、修饰符的作用域、OOP的...
JAVA面试宝典,是本人多年求职生涯大总结,里面包括JAVA面试题集合(java,jsp,struts,hibernate,spring,ajax,html,xml,css,dom,sax,ejb,sql,oracle,sqlServer,DB2,mysql...),JAVA算法,上机题及答案;...
java面试必备,java面试必会 拿出来一起分享
框架的面试题 springmvc mybatis hibernate struts2。 框架的面试题 springmvc mybatis hibernate struts2。 框架的面试题 springmvc mybatis hibernate struts2
Java面试题57.hibernate对象状态及其转换.mp4
mind整理的Java面试资料,里面包括java基础、OOP、Web基础、数据库、常用的SQL语句、java的开发框架:Struts、Hibernate、Spring和Mybatis等