hiebernate是一个开源的对象关系映射框架,他对JDBC进行了轻量级的封装,它将数据库表与pojo建立映射关系,是一个全自动的orm(JavaBean与关系型数据框的映射关系)框架。hibernate可以自动生成sql语句自动执行,使得程序员可以随意使用对象编程的思维操作数据库。hibernate可以运用在任何JDBC使用的场景中。

1.hibernate如何连接数据库

  配置文件hibernate.cfg.xml中定义了数据库的连接信息,包括数据库的方言,jdbc驱动,url,用户名及密码

Configuration类借助dom4j的xml解析器进行解析设置环境,然后使用这些环境属性创建sessionFactory,通过sessionFactory生成的session获取数据库的连接。

2.hibernate如何进行数据库的写操作

  当保存一个pojo持久化对象时,触发hibernate保存事件监听器进行处理,hibernate通过映射文件获得对象对应的表名以及属性对应的数据库列名,然后通过反射机制获得持久化对象的各个属性,最终组织新对象的insert语句,通过session.save进行持久化操作,当事务提交时才真正执行sql语句。

3.hibernate如何实现延时加载

  当hibernate查询数据的时候,数据并没有存在内存中,当程序真正对数据进行操作的时候,对象才存在内存中,这就实现了演示加载,节省了服务器内存的开销,从而提高服务器性能。

4.hibernate如何载入数据

  当需要读取文件,hibernate先尝试重session缓存中读取,如果session缓存中不存在或者脏读数据,并且配置了二级缓存,hibernate会尝试从二级缓存中检索数据。否则hibernate会根据对象类型,主键等信息组织select语句到数据库中读取,再将结果对象返回。

5.hibernate如何进行数据库查询操作

  hibernate提供SQL,HQL,Criteria查询方式,HQL运用最广泛,当执行session.createQuery()函数以一条HQL语句为参数创建Query查询对象,hibernate会使用Anltr库把HQL语句解析成JDBC可以识别的sql语句,如果设置了查询缓存,那么执行Query.list()时,会先对查询缓存进行查询。如果不存在查询缓存,会使用select语句对数据库进行查询。

 

 

缓存:

1、一级缓存是session级别的,二级缓存和查询缓存都是sessionfactory级别的,查询缓存和二级缓存是一起来使用的

2、任何sql执行都会存入到同一个session的一级缓存中去

3、同时开启查询缓存和二级缓存,可以在不同session间共享缓存的结果

4、二级缓存缓存的是实体,不是属性

5、查询缓存的结果如果只是属性,那么查询缓存中存储的是id和属性的值,如果是实体的集合,那么查询缓存存储的只是实体的id,对应的实体会存储到二级缓存中去。

6、不同session间返回数据的顺序是,二级缓存先将数据返回,然后将数据存入本session的一级缓存中去,以便下次调用时的使用