Hibernate简答题详解
1、请简述hibernate开发程序的优势
Hibernate是一个持久化数据的框架,封装了jdbc简化了数据的访问和操作;通过orm(对象-关系映射模型)使用面向对象的方式操作关系型数据库;hibernate还提供了丰富的查询方式(hql查询,本地sql,criteria)以及多种加载数据方式;数据的缓存机制,提高了程序的效率,减少了系统的开发。
2、简述hibernate环境的搭建
a) 导入相关的.jar包
b) 配置hibernate.cfg.cml文件,配置<session-factory>节点
c) 创建相关的实体,配置实体映射文件entity.hbm.xml
d) 配置hibernate.cfg.xml文件,配置<mapping>节点
3、简述hibernate配置实体映射文件的内容
在entity.hbm.xml实体映射配置文件中,
1)其中有class根节点,class根节点中有 name属性:实体class类路径;table属性:数据库表名;
2)class根节点中包括id子节点(主键生成策略:assigned,identity,native,sequence)、
3)property子节点(对象属性与数据库表中的列之间的映射,column节点)、
4)many-to-one子节点,(多对一,主要建立对象之间的关联关系)
5)set子节点(对象之间的关联关系,其中包括<key><column></column></key> <one-to-many class=””>一对多子节点)
6)在class根节点外可配置,命名sql,<query>节点
4、Hibernate的运行机制
通过java类和数据库之间的配置映射,hibernate依赖java的反射机制,xml的解析技术,jdbc完成面向对象与数据库之间数据的转换,以及关系关联的配置。
运行机制是根据发出的数据库操作指令,通过解析配置文件,转换成相应的sql语句
5、请列举hibernate的核心接口和类,以及常用方法和作用
Configuration:configure();buildSessionFactory()
SessionFactory:openSession()
Session:1)save(),
2)update(),
3)delete(),
4)createSqlQuery(),
5)createQuery(),
6)createCriteria(),
7)beginTransation(),打开事务
8)get(),
9)load()
Transaction:commit();提交事务rollback()
Query:list(),setFirstResult(),setMaxResult()
Criteria:list(),setFirstResult(),setMaxResult(),Restriction
6、Hibernate操作持久化数据的基本步骤
a) 配置hibernate.cfg.xml文件,创建Configuration
b) 解析实体映射配置文件,创建SessionFactory
c) 得到打开Session,
d) 打开事务,(增删改必要,查询可选)
e) 处理持久化数据
f) 提交事务
g) 关闭session
7、使用3种方式查询A表中第5行到第10行的数据,并按照C列排序
Hql方式:
Query query=session.createQuery(“from A as a order by a.c”);
List list=query.setFirstResult(5).setMaxResult(5).list();
Sql:
String sql=”select * from A (select A.*,rownum r from A where rownum<10)a where a.r>5 order by a.c”;
SqlQuery sqlquery=session.createSqlQuery(sql);
List list=sqlquery.list();
Criteria:
Criteria criteria=session.createCriteria(A.class);
criteria.addOrder(Order.desc(“c”));
List list=criteria.setFirstResult(5).setMaxResult(5).list();
8、Session的load和get方法,list和iterator方法的区别。
Session的load和get方法的区别:
1)load方法,在不使用数据时,它不会访问数据库;get方法,在不使用数据时,也会访问数据库
2)Load方法,当使用的数据不存在时,会报NotFoundObjectException异常;get方法,当使用的数据不存在时,返回一个null;
3)Load方法支持延迟加载;get方法不支持延迟加载
List和iterator的区别:
1)list方法查询时,每次发出一条sql语句,获取全部信息
2)Iterator方法查询时,每发出首先查询出满足条件的id总记录数,然后根据这些id依次查询,(即发出N+1次sql语句,N为满足条件的id总记录数)
9、请简述hibernate的一级缓存与二级缓存,以及如何实现
一级缓存:session级别 ,他的物理介质是内存 ,不存在并发问题,独立于每次会话,是安全的
二级缓存:sessionFactory级别 ,物理介质是内存和硬盘;存在并发问题,并发问题解决方案:设置为散装数据,缓存策略为事务型和只读型;是不安全的
二级缓存如何实现:
1)导入相关的.jar包
2)配置hibernate.cfg.xml文件,配置<property name=”hibernate.cache.second_level_cache_provinder”>true</property>.....
3)配置哪些查询需要缓存<cache usage=”write-read”>
为什么使用缓存?
提高效率,节省内存。
10、请简述inverse cascade lazy 关键字的作用
Inverse:反转,设置维护关联。Inverse=false ,为主动方;主动方是主动维护关联表的一方。
Cascade:设置对象的级联操作。Cascade=all,所有都进行级联操作;=save-update,对添加或修改对象时,进行级联操作;=delete,对删除对象时,进行级联操作;=none,所有对象取消级联操作
Lazy:延迟加载,即需要这个数据时,才加载该数据。Lazy=true为延迟加载;lazy=false,为及时加载,即不需要数据,他也会全部加载