Hibernate对象

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

猜你喜欢

转载自blog.csdn.net/W2612888/article/details/84559303