java高级工程师--------hibernate的知识重点

来源:互联网 发布:js单例模式 编辑:程序博客网 时间:2024/05/21 11:33
  • hibernate的作用

1)hibernate是基于ORM框架的,通过映射将对数据库的操作改成对pojo类得操作,从而实现了面向对象的对数据库进行操作。

2)hibernate在JDBC的基础上进行封装,对数据库的操作是全自动化的,大部分功能不用再编写sql语句

3)hibernate有一级缓存和二级缓存来提高执行的效率

4)与spring整合之后,统一由spring配置管理事物,简化了代码,很好的对事物进行管理

5)表与表之间的级联关系,延迟加载和抓取策略同样提高了对数据操作的效率


  • hibernate的工作流程

 1.         读取并解析配置文件

2.         读取并解析映射信息,创建SessionFactory

3.         打开Sesssion

4.         创建事务Transation

5.         持久化操作

6.         提交事务

7.         关闭Session


  • load()和get()的区别

1.从返回结果上对比:
load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常
get方法检索不到的话会返回null

 

2.从检索执行机制上对比: get方法和find方法都是直接从数据库中检索 而load方法的执行则比较复杂首先查找session的persistent Context中是否有缓存,如果有则直接返回 如果没有则判断是否是lazy,如果不是直接访问数据库检索,查到记录返回,查不到抛出异常 如果是lazy则需要建立代理对象,对象的initialized属性为false,target属性为null 在访问获得的代理对象的属性时,检索数据库,如果找到记录则把该记录的对象复制到代理对象的target上,并将initialized=true,如果找不到就抛出异常。


总之对于get和load的根本区别,一句话,hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常;而对于get方法,hibernate一定要获取到真实的数据,否则返回null。

  • Hibernate自带的分页机制是什么?如果不使用Hibernate自带的分页,则采用什么方式分页?

1、hibernate自带的分页机制:获得Session对象后,从Session中获得Query对象。用Query.setFirstResult():设置要显示的第一行数据,
Query.setMaxResults():设置要显示的最后一行数据。
2、不使用hibernate自带的分页,可采用sql语句分页,

mysql中分页处理:limit命令

mysql> SELECT * FROM table LIMIT 5,10; //检索记录行 6-15 ,注意,10为偏移量
//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行96-last.
//如果只给定一个参数,它表示返回最大的记录行数目:
mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行//也就是说,LIMIT n 等价于 LIMIT 0,n。

oracle中分页处理:top命令

如:3:为每页显示的记录,2为当前页:

select * from (select top (2*3) * from market order by news_id ) a where
    a.news_id not in (select top (1*3)
    news_id from market order by news_id )

2和1表示页,3表示每页的数据数


  • update()和saveOrUpdate()的区别?

update():是当跨session时,对于托管的实例对象,调用update,才会将该实例对象变成持久化对象,更新数据。

saveOrUpdate():也是跨session的,会选择行执行save或者update操作。如果对象在该session种已经持久化,不进行操作;对象的标识符属性(identifier property)

在数据库中不存在或者是个暂时的值,调用save()方法保存它;如果session中的另一个对象

有相同的标识符抛出一个异常;以上皆不符合则调用update()更新之。

  • hibernate持久化对象的三种状态及怎样相互转换?

包括瞬态、托管状态、持久化状态

瞬态:普通的实例化对象VO,和数据库没有任何关系--------------通过save变成持久态

托管:实例化对象,但是有数据库标识id,但在数据库中没有对应记录----------通过update可变成持久化态

持久化:实例化对象,和数据库记录相对应。-------通过delete、clear等操作可变成托管态,session关闭


  • hibernate的5个核心接口

session:session接口负责执行对数据库进行CURD的操作,session是非线程安全的

sessionFactory:充当数据库存储源代理,初始化hibernate,创建session,它不是轻量级的,故一般一个项目对应一个sessionFactory,当用到多数据库时,可以配置多个         sessionFactory

Configuration:负责启动hibernate,创建sessionFactory,在启动项目时,会解析配置文件,从而创建sessionFactory

transaction:负责事物相关的操作

Query:负责对数据进行操作,包括sql语句和hql语句







原创粉丝点击