Configuration对象
Configuration 类的作用是对Hibernate 进行配置,以及对它进行启动(即加载配置文件)。在Hibernate 的启动过程中,Configuration 类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。
1 Configuration加载核心配置文件代码
Configuration cfg = new Configuration();//加载hibernate.properties
Configuration cfg = new Configuration().configure();//加载hibernate.cfg.xml
SessionFactory对象
SessionFactory(Session工厂)接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。
SessionFactory内部维护了Hibernate的连接池和Hibernate的二级缓存
1 SessionFactory的特点
- 单例,因为它不是轻量级的对象,通常一个项目只要一个SessionFactory对象即可,当需要对多个数据库进行操作的时候,可以为每个操作的数据库指定一个SessionFactory对象
- 线程安全
2 在核心配置文件中配置连接池(这里以c3p0为例)
SessionFactory内部维护了Hibernate的连接池和Hibernate的二级缓存(不讲)。是线程安全的对象。一个项目创建一个对象即可。
<!-- 配置C3P0连接池 -->
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!--在连接池中可用的数据库连接的最少数目 -->
<property name="c3p0.min_size">5</property>
<!--在连接池中所有数据库连接的最大数目 -->
<property name="c3p0.max_size">20</property>
<!--设定数据库连接的过期时间,以秒为单位,
如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除-->
<property name="c3p0.timeout">120</property>
<!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->
<property name="c3p0.idle_test_period">3000</property>
Session对象
Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。
Session代表的是Hibernate与数据库的链接对象。不是线程安全的。与数据库交互桥梁。
Session中的API
Session类似于JDBC中的Connection,是一个连接对象
1 保存
Serializable save(Object obj);
2 查询
T get(Class c,Serializable id);
T load(Class c,Serializable id);
3 删除
void delete(Object obj);
Session中查询方法的get和load方法的区别?
get方法:1>采用的是立即加载,也就是说执行到get()这行代码时,立即发送SQL语句查询结果;2>查询后返回的是对象的本身;3>查询一个找不到的对象时,返回null
load方法:1>采用的是懒加载(也就是延迟加载),执行到load()这行代码时,不会立即发送SQL语句去查询,只有在使用这个对象的时候才会发送SQL语句;2>查询后返回的是代理对象,这是利用Javassist技术产生的代理;3>查询一个找不到的对象时,抛出ObjectNotFoundException