一.Hibernate核心类
以下几个核心类几乎在任何实际开发中都会用到,通过这些类,不仅可以存储和获得持久对象,并且能够进行事物控制。下面一一进行·介绍。
1.Configuration类
Configuration类的作用是对hibernate进行配置,以及对它进行启动。可以完成以下几项工作:
a)加载配置文件
Configuration类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。eg:
Configuration config=new Configuration().configure();
Hibernate会自动在当前的classpath中搜寻hibernate.cfg.xml或者hibernate.properties文件并将其读到内存中作为后继操作的基础配置。
如果不希望使用默认的hibernate.cfg.xml文件作为配置文件,也可以指定配置文件名:
File file=new File("d:\\xautjzd\\myhibernate.xml");
Configuration config=new Configuration().configure(file);
b)动态添加映射文件
可以利用Configuration类在程序中添加xml映射定义文件。如果映射定义文件在classpath中,则:
Configuration cfg=new Configuration();
cfg.addResource("User.hbm.xml");
或者指定被映射的类,让hibernate寻找映射定义文件:
Configuration cfg=new Configuration().addClass(org.hibernate.auction.User.class);
c)可以通过Configuration指定配置属性
Configuration cfg=new Configuration().setProperty("hibernate.dialect","org.hibernate.dialect.MySQLDialect");
2.SessionFactory类
它是在整个应用中共享。但是当项目需要操作多个数据库时,必须为每个数据库指定一个SessionFactory。一般通过如下方式获得SessionFactory实例:
Configuration config=new Configuration().configure();
SessionFactory sessionFactory=config.buildSessionFactory();
然后从SessionFactory获得Session对象:
Session session=sessionFactory.openSession();
SessionFactory.close()用于释放某些资源,如缓存、连接池等。
3.Session类
Session类对于hibernate开发人员来说是最重要的一个类。Session是持久层操作的基础,相当于JDBC的Connection。Session实例通过SessionFactory实例来获取,之后就可以调用Session所提供的save、get、load、update、delete、flush等方法完成持久层操作。
eg: Session session=sessionFactory.openSession();
Person person=new Person();
person.setName("xautjzd");
person.setAge(23);
session.save(person);
session.flush();
Session的flush方法是强制数据库同步,即强制hibernate将person实例立即同步到数据库中。如果在事物中则不需要flush方法,在事物提交的时候,hibernate会自动执行flush方法,另外当Session关闭时,也会自动执行flush方法。
4.Query和Criteria类
通过Query类可以方便地对数据库及持久对象进行查询,有两种表达方式:HQL语言或者本地数据库的SQL语言。
Criteria类与Query类非常类似,可以认为Criteria Query是传统SQL的对象化表示。
5.Transaction接口
二.Session清理缓存的时间点
Session通过setFlushMode()来设置清理缓存的时间点。FlushMode类定义了三种不同的清理模式:FlushMode.AUTO、FlushMode.COMMIT、FlushMode.NEVER,无论哪种,当调用session.flush()都会清理缓存。区别是:
设置为FlushMode.AUTO时,则session.find()、session.iterate()、transaction.commit().session.flush()都将会清理。
设置为FlushMode.COMMIT时,则只有transaction.commit()方法调用时才会自动清理缓存。
设置为FlushMode.NEVER时,则只能通过session.flush()来清理。