十二、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 是如何工作的?
- 通过Configuration config = new Configuration().configure();解析配置文件
- 由hibernate.cfg.xml中的<mapping resource=”com/xx/User.hbm.xml”/>读取并解析映射信息
- 通过SessionFactory sf = config.buildSessionFactory();//创建SessionFactory
- Session session = sf.openSession();//打开Sesssion
- Transaction tx = session.beginTransaction();//创建并启动事务Transation
- persistent operate操作数据,持久化操作
- tx.commit();//提交事务
- 关闭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是通过反射的方式来获得对象实例的,此时会调用默认的无参构造.
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/97000.html