Hibernate总结(二)——相关API

前言:

hibernate总结(一)——hibernate入门最后的测试代码中用到了hibernate的相关API,如Configuration、SessionFactory、Session、Transaction,接下来一起来对他们进行了解。

1、Configuration:配置对象

Configuration主要用于Hibernate框架加载映射文件

加载核心配置文件:

在使用hibernate时,首先要创建Configuration实例,Configuration实例主要用于启动、加载、管理hibernate的配置文件信息。在启动的hibernate的过程中,Configuration实体首先确定hibernate配置文件的位置,然后读取相关配置,最后创建一个唯一的SessionFactory实例。Configuration对象只存在于系统的初始化阶段,它将SessionFactory创建完成后,就完成了自己使命。

hibernate通常使用Configuration config=new Configuration.configure();的方式创建实例,此种默认会去src下读取hibernate.cfg.xml配置文件。如果不想使用默认的hibernate.cfg.xml配置文件,自己如果指定目录的话,需要向configure()方法中传递一个文件路径的参数,Configuration config=new Configuration.configure("xml文件位置");

这样的话,hibernate会去指定位置查找配置文件。

加载映射文件:

hibernate除了可以使用Configuration对象加载核心配置文件外,还可以利用该对象加载映射文件。因为使用properties文件做配置文件的话,其他的属性可以使用key=value的格式去设置,但是映射文件没有办法加载。这时这个对象就没发使用了。可以在手动编写代码的时候去加载映射文件。

Configuration config=new Configuration.configure("xml文件位置");
config.addResource("cn/ytm/domain/Customer.hbm.xml");

2、SessionFactory:Session工厂对象

SessionFactory接口负责hibernate的初始化和建立session对象。它在hibernate中起到了一个缓冲区作用,Hibernate可以将自动生成的SQL语句、映射数据以及某些可重复利用的数据放在这个缓冲区中,同时还保存了对象数据库配置的映射关系,维护当前的二级缓存。

SessionFactory实例是通过Configuration对象获取的。

SessionFactory sessionFactory=config.buildSessionFactory();

特点:

1)它是线程安全的,同一个实例能够供多个线程共享。

2)它是重量级的,不能随意的创建和销毁它的实例。

所以,一般情况下,一个项目中只需要一个SessionFactory,只有当应用中存在多个数据源时,才为每一个数据源建立以SessionFactory实例。因此,在项目中,通常会抽取出一个HibernateUtils工具类用来提供session对象。

public class HibernateUtils {
	private static final Configuration configuration;
	private static final SessionFactory sessionFactory;
	static{
		configuration=new Configuration().configure();
		sessionFactory=configuration.buildSessionFactory();
	}
	
	public static Session openSession(){
		return sessionFactory.openSession();
	}
}
SessionFactory内部还维护了一个连接池,可使用C3P0,配置C3P0内容如下:

引入c3p0相关jar包:


<!--C3P0配置 -->
        <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
        <!-- 在连接池中可用数据库连接的最大数目 -->
        <property name="hibernate.c3p0.max_size">20</property>
         <!-- 在连接池中可用数据库连接的最小数目 -->
        <property name="hibernate.c3p0.min_size">5</property>
        <!-- 设定数据库连接的过期时间,以秒为单位 -->
        <!-- 如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->
        <property name="hibernate.c3p0.timeout">120</property>
        <!-- 每3000秒检查所有连接池中的空闲连接,一秒为单位 -->
        <property name="hibernate.c3p0.idle_test_period">3000</property>

3、Session

Session是应用程序与数据库之间交互操作的一个单线程对象,是Hibernate运作的中心。

主要功能:为持久化对象提供创建、读取和删除的能力,所有持久化对象必须在session的管理下才可以进行持久化操作。

创建SessionFactory实例后,就可以通过它获取Session实例,获取session实例有两种方法,一是通过openSession()方法,另一种是getCurrentSession()方法。两种方法代码:

//采用openSession方法创建session
Session session=sessionFactory.openSession();
//采用getCurrentSession()方法创建session
Session session=sessionFactory.getCurrentSession();

主要区别:

采用openSession方法获取session实例时,SessionFactory直接创建一个新的Session实例,并且在使用完成后需要调用close方法进行手动关闭。而getCurrentSession方法创建的Session实例会被绑定到当前线程中,它在提交或回滚时会自动关闭。

Session是线程不安全的,多个并发线程同时操作一个Session实例时,就可能导致Session数据存取混乱。

它是轻量级的,有缓存,即hibernate的一级缓存。

提供的方法:

1)save()、update()、saveOrUpdate()方法:用于增加和修改对象

2)delete()方法:用于删除对象

3)get()和load()方法:根据主键查询

4)createQuery()方法和createSQLQuery()方法:用于数据库操作对象

5)createCriteria()方法:条件查询。

4、Transaction

Transaction接口主要用于管理事务,它是hibernate的数据库事务接口,且对底层的事务接口进行了封装。Transaction接口的事务对象是通过session对象开启的。

Transaction tx = session.beginTransaction();

方法:

1)commit()方法:提交相关连的session实例

2)rollback()方法:撤销事务操作。即事务回滚。

总结:

这些接口都是hibernate的基础,在使用给的过程中可以重点理解和掌握,小编在这里做简单的介绍,希望对大家有帮助。有问题还望斧正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值