Hibernate的核心API
Configuration:负责管理 Hibernate 的配置信息
-
-
- 1.加载核心配置文件:
-
核心配置有两种:
* hibernate.properties:
* 加载:
* Configuration configuration = new Configuration();
* hibernate.cfg.xml:
* 加载:
* Configuration configuration = new Configuration().configure();
-
-
- 2.加载映射文件:
-
* 第一种写法:
* configuration.addResource("cn/itcast/hibernate3/demo1/Customer.hbm.xml");
* 第二种写法:(要求:映射文件名称要规范,类与映射在同一个包下)
* configuration.addClass(Customer.class);
SessionFactory:Session工厂
-
-
- Configuration对象根据当前的配置信息生成 SessionFactory对象
- SessionFactory 对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句
- SessionFactory 对象是线程安全的
- SessionFactory还负责维护Hibernate的二级缓存
-
-
-
- SessionFactory对象根据数据库信息,维护连接池,创建Session(相当于Connection)对象.
-
public class HibernateUtils { private static Configuration configuration; private static SessionFactory sessionFactory; static{ configuration = new Configuration().configure(); sessionFactory = configuration.buildSessionFactory(); } public static Session openSession(){ return sessionFactory.openSession(); } public static void main(String[] args) { openSession(); } }
在Hibernate中使用c3p0连接池:
-
-
- 引入c3p0的jar包
- 在核心配置中添加一段配置:
-
<!-- C3P0连接池设定--> <!-- 使用c3po连接池 配置连接池提供的供应商--> <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:
相当于 JDBC的 Connection
Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心
Session是线程不安全的
所有持久化对象必须在 session 的管理下才可以进行持久化操作
Session 对象有一个一级缓存,显式执行 flush 之前,所有的持久化操作的数据都缓存在 session 对象处
持久化类与 Session 关联起来后就具有了持久化的能力
Session维护了Hiberante一级缓存.
方法:
save()/persist() :添加.
update() :修改
saveOrUpdate() :增加和修改对象
delete() :删除对象
get()/load() :根据主键查询
createQuery() :创建一个Query接口,编写HQL语句
createSQLQuery() :创建一个SQLQuery接口,编写SQL语句数据库操作对象
createCriteria() :返回一个Criteria接口.条件查询
Transaction:
获得:
Transaction tx = session.beginTransaction();
常用方法:
commit() :提交相关联的session实例
rollback() :撤销事务操作
wasCommitted() :检查事务是否提交
***** 如果没有开启事务,那么每个Session的操作,都相当于一个独立的事务
Query
Query代表面向对象的一个Hibernate查询操作
session.createQuery 接受一个HQL语句
HQL是Hibernate Query Language缩写, 语法很像SQL语法,但是完全面向对象的
Criteria
Criteria条件查询: