1. 用于加载核心配置文件:Configuration
configuration的主要作用是负责管理hibernate的配置信息。
<1>加载核心文件
//hibernate.peoperties 核心文件的加载方式
Configuration configuration = new Configuration();
//hibernate.cfg.xml 核心文件的加载方式
Configuration configuration = new Configuration().configure();
<2>加载映射文件
//第一种写法:使用addResource方法
configuration.addResource("cn/itcast/hibernate3/demo1/Customer.hbm.xml");
//第二种写法:(要求:映射文件名称要规范,类与映射在同一个包下)
configuration.addClass(Customer.class);
2. Session工厂:SessionFactory
Configuration对象根据当前的配置信息生成 SessionFactory对象
SessionFactory 对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句
SessionFactory 对象是线程安全的
SessionFactory还负责维护Hibernate的二级缓存
SessionFactory对象根据数据库信息,维护连接池,创建Session(相当于Connection)对象.
3. 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接口.条件查询
4. 事务:Transaction
获取 Transaction tx = session.beginTransaction();
常用方法:
***** 如果没有开启事务,那么每个Session的操作,都相当于一个独立的事务。
commit() :提交相关联的session实例
rollback() :撤销事务操作
wasCommitted() :检查事务是否提交
5. Query
Query代表面向对象的一个Hibernate查询操作。
session.createQuery 接受一个HQL语句。
HQL是Hibernate Query Language缩写, 语法很像SQL语法,但是完全面向对象的。
// 1.简单查询
// List<Customer> list = session.createQuery("from Customer").list();
// 2.条件查询:
// List<Customer> list = session.createQuery("from Customer where name = ?").setParameter(0, "芙蓉").list();
// 3.分页查询:select * from customer limit a,b; a:从哪开始 b:每页显示记录数.
Query query = session.createQuery("from Customer");
query.setFirstResult(3);
query.setMaxResults(3);
List<Customer> list = query.list();
for (Customer customer : list) {
System.out.println(customer);
}
6. Criteria
Criteria是条件查询。
Criteria 是Hibernate提供的用于条件查询接口。
Criteria criteria = session.createCriteria(Customer.class);
// 1.简单查询
//List<Customer> list = session.createCriteria(Customer.class).list();
// 2.条件查询:
Criteria criteria = session.createCriteria(Customer.class);
criteria.add(Restrictions.eq("name","芙蓉"));
List<Customer> list = criteria.list();
// 3.分页查询:
Criteria criteria = session.createCriteria(Customer.class);
criteria.setFirstResult(3);
criteria.setMaxResults(3);
List<Customer> list = criteria.list();
for (Customer customer : list) {
System.out.println(customer);
}