Java面试题之Hibernate

十二、Hibernate

113. 为什么要使用 hibernate?

1.对JDBC访问数据库的代码做了大量的封装,简化开发
2.性能好,支持各种关系数据库.

114. 什么是 ORM 框架?

ORM的意思是对象关系映射,它的作用是在关系型数据库和业务实体对象之间做映射
这样我们在操作具体业务对象的时候,就不需要去和具体的SQL语句打交道,只需要操作对象的属性和方法.

115. hibernate 中如何在控制台查看打印的 sql 语句?

在hibernate配置文件中配置hibernate.show_sql属性

116. hibernate 有几种查询方式?

三种:HQL查询    QBC查询(也叫Criteria查询)  本地SQL查询

117. hibernate 实体类可以被定义为 final 吗?

不能,因为hibernate使用代理方式在延迟加载的情况下提高性能,如果定义为final 就不能继承,也就无法实现代理.

118. 在 hibernate 中使用 Integer 和 int 做映射有什么区别?

1.如果数据库返回字段值是null的话,int类型会报错,Integer则不会

119. hibernate 是如何工作的?

  1. 通过Configuration config = new Configuration().configure();解析配置文件
  2. 由hibernate.cfg.xml中的<mapping resource="com/xx/User.hbm.xml"/>读取并解析映射信息
  3. 通过SessionFactory sf = config.buildSessionFactory();//创建SessionFactory
  4. Session session = sf.openSession();//打开Sesssion
  5. Transaction tx = session.beginTransaction();//创建并启动事务Transation
  6. persistent operate操作数据,持久化操作
  7. tx.commit();//提交事务
  8. 关闭session和sessionFactory

120. get()和 load()的区别?

  • get方式会直接触发sql语句查出对象,load方式会使用延迟加载的机制加载这个对象,此时是个代理对象 只保存实体对象的id值,只有用到其他属性的时候才会调用sql查出来.
  • 如果对象不存在,get方式会抛出空指针异常,load方式会抛出ObjectNotFoundException

121. 说一下 hibernate 的缓存机制?

hibernate为了降低对数据库访问的频率,加入了缓存机制.缓存内的数据是对物理数据库数据的复制,
应用程序在运行时,从缓存中读写数据.
Hibernate的缓存包括两大类:session一级缓存和sessionFactory二级缓存.一级缓存不可卸载.
当根据ID查询数据的时候,首先从session缓存中查,查不到,如果设置了二级缓存,那么从二级缓存中查,
如果都查不到,再查数据库.将查到的数据按照ID放入缓存中,在删除,更新,增加数据的时候更新缓存.

122. hibernate 对象有哪些状态?

Hibernate对象有三种状态
    1.    Transient 瞬时态, 此时对象刚new出来,还没有save()
    2.    Persistent 持久态, 调用了save方法或者游离态的对象调用了update方法后会变成持久态
        如果对象是持久化对象时,那么对该对象的任何修改,都会在提交事务时才会与之进行比较
    3.    当调用了session.clear()方法,以后 对象就会变成游离态

123. 在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?

采用getCurrentSession()获得的session会绑定到当前线程,而openSession则不会
getCurrentSession()获得的session在commit或者rollback后会自动关闭,而openSession必须手动关闭

124. hibernate 实体类必须要有无参构造函数吗?为什么?

必须要有,以为hibernate是通过反射的方式来获得对象实例的,此时会调用默认的无参构造.
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值