用于对特定数据库提供支持,其中包含了针对特定数据库特性的实现,如Hibernate数据库类型到特定数据库数据类型的映射等。使用Hibernate必须首先提供这些基础信息以完成初始化工作,为后续操作做好准备。
spring集成hibernate之后就可以在实现HibernateDaoSupport的类中获取sessionfactory以及session了。
我们通过Configuration来读取配置文件,然后就可以创建SessionFactory,这段代码在 所有系统中都大同小异,一般就是xml配置文件的名字不一样,所以也没什么好说的。当我们有了SessionFactory以后就可以获取Session了。
)对于sessionFactory,通过在spring配置jdbc datasource对数据库进行管理,然后通过datasource注入sessionFactory的方式来创建会话工厂。这样我们一旦得到了sessionFactory就可以获取session,connection,来实现数据持久化的操作了。
当前的thread线程是获取不到的,threadLocals的维护在jdk中说明了,是由threadLocal来维护的。如果应该从threadLocal中获取threadLocals的值。
sessionFactory.getCurrentSession() *** 是从SPRING的线程池中获取数据库session的 *** 。若池中已有存在的session,则会被取出,若没有,就会报空指针。
是自动关闭的,但是如果你自己由factory生成一个session的话,就必须进行手动关闭。
会。当SessionFactory被关闭后,Hibernate会自动关闭打开的所有Session,这也包括了打开的连接。Session关闭时,Hibernate默认会将连接返回给连接池,等待下一次使用。因此,当SessionFactory关闭后,Hibernate会自动关闭数据库连接。
事务管理和AOP一回事,开启的时候相当于一个BeforeAdvice 。只有当所用 *** 内的所用代码都成功执行了才会提交(这是会涉及到回滚,有异常会回滚,当然也可以设置不回滚的异常)。关闭是在commit后或是回滚后。
session是非线程安全的,所以一个请求处理对应一个session。用完之后注意close 当然若几个请求要在一个事务中进行,则需要共享session,此时可以结合spring的事务进行处理。