1.Configuration 接口:Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。
File file=new File("d:/hibernamte2.cfg.xml");
Configuration configure = new Configuration().configure(file);
c.另外一种更常用,就是用URL,如下代码:
URL url = new URL( http://localhost/hibernate2.cfg.xml );
Configuration configure = new Configuration().configure(url);
重要方法:
public Configuration configure (String resource) throws HibernateException ;在参数中指定要加载的XML格式的配置文件
public Configuration configure(URL url) thrwos HibernateException:
public SessionFactory buildSessionFactory() throws HiberanteExcepiton : 根 据配置文件实例化一个新的SessionFactory对象,这个SessionFactory将是不可变的,所以在创建了SessionFactory 对象后,对Configuration对象作出的所有修改不会影响以前创建出的SessionFactory对象。
Configuration 对象的作用是除了有读取配置文件的功能,还能创建SessionFactory对象。通常,一个应用程序会创建一个Configuration对象,然后 利用Configuration实例建立唯一的SessionFactory实例,这就意味着Configuration对象只存在于系统的 初始化阶 段,然后所有的持久化操作都能通过这个唯一的SessionFactory实例来进行。
Configuration对象只有在 Hibernate 进行初始化的时候才需要创建,当使用Configuration对象的实例创建了SessionFactory对象的实例后,其配置 信息已经绑定在他返回的SessionFactory对象实例中。因此,一般情况下,得到SessionFactory对象 后,Configuration对象的使命就结束了。
1:他是线程安全的,同一个实例可以被应用的多个线程共享
2: 他是重量级的,不能随意创建和销毁他的实例,如果应用只访问一个数据库,只需要创建一个SessionFactory的实例,在应用初始化的时候创建实 例。如果应用需要访问多个数据库,那么就需要根据不同的配置文件(包括有特定数据库的配置)创建多个Configuration实例并构建与每个数据库相 对应的sessionFactory实例。
3:以后对Configuration对象势力作出的修改都不会影响已经创建好的 SessionFactory实例,如果需要使用基于改动后的Configuration实例的SessionFactory,需要从 Configuration对象中重新创建新的SessionFactory实例。
org.hibernate Interface SessionFactory
public interface SessionFactory extends Referenceable,Serializable :创建Session,他是客户端获取Session对象的工厂
常用的方法:
public Sessioin openSession() throws HIbernateException :创建一个数据库连接,并把他放在Session对象中,并返回
public Session openSession(Connection connection): 创建一个Session对象,并把参数给出的 connection对象放在其中
public boolean isClosed(): 判断当前SessionFactory对象是否关闭了
public void close() throws HibernateException 关闭SessionFactory以及释放所有的SessionFactory涉及到的资源(缓存,数据库连接池等)但在调用此方法之前,应该确定没有当前对象创建的Session没有关闭
1,不是线程安全的,应该避免多个线程共享同一个Session实例
2,Session实例是轻量级的,所谓轻量级:是指他的创建和删除不需要消耗太多资源
3,Session对象内部有一个缓存,被称为Hibernate第一缓存,他存放被当前工作单元中加载的对象,每个Session实例都有自己的缓存。
org.hibernate Interface Session
public interface Session extends Serializable : 是一个Java application 和Hibernate之间主要的运行时接口,这是执行持久化服务的中心API
主要方法:
public Transaction beginTransaction() throws HibernateException :返回和当前Session对象相互联系的Transaction对象(表示在数据库中重新开始一个事务)
public Transaction getTransaction() : 返回和当前session联系的Transaction对象
public Connection connection close() throws HibernateExcepton :结束当前的Session对象
public void clear() :清空Session,清除所有保存在当前Session缓存中的实体对象,终止所有正在执行的方法(eg: save() , update() ,delete() .....)
public Serializable save(Object object) throws HibernateException 对当前参数指定的对象进行持久化(系统会首先赋予参数对象一个标识符OID),他相当于insert语句 后面在详细介绍
public Connection connection() throws HibernateException 得到当前Session 中包含的Connection对象。
public boolean contains(Object object) : 判断参数给出的对象(持久化类)是否在当前Session的缓存中
public void evict(Object object) throws HibernateException :将参数给出的Object从当前Session对象类中删除,使这个对象从持久态变成游离态,这种状态的改变不会引起对数据库的同步,后面详细介绍
public Object load(Class theclass ,Serializable id) throws HibernateException 返回第一个参数指定类对应的表中,第二个参数指定的行(第二个参数就是要取得对象的OID ,他对应表中主键列的值 )
public void update(Object object) throws HibernateException :更新一个对象到数据库中,后面在详细介绍
public void delete (Object object) throws HibernateException :从数据库中删除和参数指定的对象对应的记录
public Object get(Class class,Serializable id) throws HibernateException :和load()方法一样区别在于,如果数据库表中没有对应的记录,get()方法返回null,load()方法将报异常
public void commit() throws HibernateException 刷新当前的Session以及结束事务的工作,这个方法将迫使数据库对当前的事务进行提交
public void rollback() throws HibernateException :强迫回滚当前事务
public boolean isActive() throws HibernateException : 这个事务是否存活