第二章Hibernate的核心接口与类

本文深入介绍了Hibernate框架的核心组件,包括Configuration、SessionFactory、Session、Transaction等关键接口与类的功能及使用方法,并探讨了Hibernate如何与数据库连接池如Tomcat和C3P0集成。
  1. Hibernate中的核心接口与类
  • Configuration类
  • SessionFactory类
  • Session类
  • Transaction类
  • Query接口
  • Criteria接口

    2. 使用MyEclipse可视化开发Hibernate的例子(略)

    3. 设置Hibernate使用Tomcat的连接池

    4. Hibernate使用C3P0连接池

Hibernate中的接口与类

根据上图的结构可以得出他们的依赖关系。

  • Configuration类负责管理Hibernate的配置信息

     1.Hibernate运行的底层信息:数据库的URL,用户名,用户密码,JDBC驱动类,数据库Dialect,数据库连接池等。

       2. Hibernate配置文件默认为hibernate.cfg.xml,或者hibernate.properties

     3.Hibernate映射文件(*.hbm.xml)

//1. new a configuraion instance
Configuration  config = new Configuration();
//2.load the configure file
config.configure();
//3.get sessioonFactory,at this stage the configratino is useless.
SessionFactory sessionFactory = config.buildSessionFactory();
  •   SessionFactory(会话工厂)接口

     1.会话工厂缓存了生成的SQL语句和一些数据

     2.会话工厂在用用初始化时被创建,是一个重量级的类。通常情况下,整个应用只有唯一的一个会话工厂。

     3 .使用Hibernate访问多个数据库,需要对每一个数据库使用一个会话工厂

       4.应用程序从会话工厂里获得Session(会话)实例

 

//1. new a configuraion instance
Configuration  config = new Configuration();
//2.load the configure file
config.configure();
//3.get sessioonFactory,at this stage the configratino is useless.
SessionFactory sessionFactory = config.buildSessionFactory();
  • Session(会话)接口

    1.Session也成为持久化管理,因为它是与持久化有关的操作接口

    2.Session代表与数据库之间的一次操作。

    3.Session通过SessionFactory打开,在所有的工作完成后,需要关闭。

    4.会话并不是线程安全的,应该被设计为每次只能在一个线程中使用

 

//1. new a configuraion instance
Configuration  config = new Configuration();
//2.load the configure file
config.configure();
//3.get sessioonFactory,at this stage the configratino is useless.
SessionFactory sessionFactory = config.buildSessionFactory();
//get session
Session session = sessionFactory.getCurrentSession();

 

   save()方法

   get()/load()方法

   update()方法

   delete()方法

  •    load()与get()方法的区别:

    1. 使用load()方法,如果没有找到记录,就会抛出违例

    2.使用get()方法,如果没有找到激励,返回Null

    3. 两个方法对缓存对象的读取也不同

 

  • Transaction(事务)接口

     1.Transaction从底层的事务实现中抽象出来的接口

     2.可能是一个JDBC事务或一个JTA事务,这有助于保持Hibernate应用在不同类型的执行环境或容器中的可移植性

     3.使用Hibernate进行操作时必须显示的调用Transaction

Session session = sessionFactory.getCurrentSession();
Transaction tx = session.beginTransaction();
......
tx.commit();
session.close();
 
  • Query接口

     1.使用Query类型的对象可以方便我们对数据库进行查询操作,它使用  QBC,QBE,HQL或者原生SQL(Native SQL)对数据执行查询操作。

Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.getCurrentSession();
Transaction tx = session.beginTransaction();
Query query = session.createQuery("from guestbook");
List list = query.list();
tx.commit();
  •  Criteria接口

    1.Criteria接口与Query接口非常类似,它允许我们创建并执行面向对象方式的查询。

 

Configurain config = new Configuraion().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.getCurrentSession();
Transaction tx = session.beginTransaction();
Criteria crit = session.CreateCriteria(GuestBook.class);
Criterion  criterion1 = Restrictions.like("name","刘%");
crit.add(criterion1);
List list = crit.list();
tx.commit();
 

    2. 使用MyEclipse可视化开发Hibernate的例子(略)

Exception in thread "main" org.hibernate.HibernateException: No CurrentSessionContext configured!
	at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:620)
	at com.crazy.HibernateTest.main(HibernateTest.java:16)

  发生一下异常时,是因为CurrentSession没有配置,所以不能使用getCurrentSession来获取Session。应该使用openSession来获取session。

No CurrentSessionContext configured!

    3. Hibernate设置使用Tomcat中的连接池

  •       修改Tomcat的context.xml
<Context reloadable="true">
	<Resource name="jdbc/oracleds" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000"
	username="scott" password="tiger" driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@127.0.0.1:1521:ora92"/>
</Context>

 

  •       修改一下Hibernate的配置文件

    这种配置是针对Web应用程序,否则不可以这样配置。

<property name="connection.datasource">java:com/env/jdbc/oracleds</property>
  •       Hibernate设置使用c3p0连接池

        首先添加C3P0的jar文件。

        配置内容如下:  

	<!-- configuration of c3p0-->
	<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
	<property name="c3p0.max_size">10</property>
	<property name="c3p0.min_size">5</property>
	<property name="c3p0.timeout">10</property>
	<property name="c3p0.max_statements">10</property>

    一篇关于c3p0配置信息的文章 : http://msq.iteye.com/blog/60387

 

 


 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值