Hibernate的核心API
一般我们通过hibernate进行操作的时候,都会遵循下面的流程,那么接下来我对每一个步骤进行讲解:
1 public void testInsert() { 2 //(1) 实例化配置对象 加载映射文件 加载 hibernate.cfg.xml 3 Configuration configuration = new Configuration().configure(); 4 //(2)创建会话工厂 5 SessionFactory sessionFactory = configuration.buildSessionFactory(); 6 //(3) 创建会话 7 Session session = sessionFactory.openSession(); 8 //(4) 开启事务 9 Transaction transaction = session.beginTransaction(); 10 11 /* 12 *编写自己的逻辑代码 13 */ 14 15 // 提交事务 16 transaction.commit(); 17 session.close(); 18 sessionFactory.close(); 19 }
(1) 实例化配置对象 configuration
这一步是用来加载核心配置文件
核心配置有两种:
hibernate.properties
加载:Configuration configuration = new Configuration();
hibernate.cfg.xml:
加载:Configuration configuration = new Configuration().configure();
(2)创建会话工厂 sessionFactory
Configuration对象根据当前的配置信息生成 SessionFactory对象,
SessionFactory 对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句
SessionFactory 对象是线程安全的,SessionFactory还负责维护Hibernate的二级缓存,
SessionFactory对象根据数据库信息,维护连接池,创建Session(相当于Connection)对象
(3)创建会话 session对象(相当于 JDBC的 Connection)
Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心,是线程不安全的
所有持久化对象必须在 session 的管理下才可以进行持久化操作,Session 对象有一个一级缓存
显式执行 flush 之前,所有的持久化操作的数据都缓存在 session 对象处,持久化类与 Session 关联起来后就具有了持久化的能力,
Session维护了Hiberante一级缓存.
session对象提供了许多的方法来实现增删改差:
save()/persist() :添加
update() :修改
saveOrUpdate() :增加和修改对象
delete() :删除对象
get()/load() :根据主键查询
createQuery() :创建一个Query接口,编写HQL语句
createSQLQuery() :创建一个SQLQuery接口,编写SQL语句数据库操作对象
createCriteria() :返回一个Criteria接口.条件查询
(4)提取工具类
因为我们在项目开发中经常需要进行相关增删改查的操作,所以都需要这个session对象,这个时候我们可以把她变成一个工具类
1 public class HibernateUtils { 2 3 private static Configuration configuration; 4 5 private static SessionFactory sessionFactory; 6 7 static{ 8 configuration=new Configuration().configure(); 9 10 sessionFactory=configuration.buildSessionFactory(); 11 } 12 public static Session getSession(){ 13 return sessionFactory.openSession(); 14 } 15 } 16 /* 17 *通过这个工具类,只要你每次HibernateUtils.getSession 18 *就可以获得session对象 19 */
(5) 开启事务 Transaction 对象
获得:Transaction tx = session.beginTransaction();
常用方法:
commit() :提交相关联的session实例
rollback() :撤销事务操作
wasCommitted() :检查事务是否提交
如果没有开启事务,那么每个Session的操作,都相当于一个独立的事务
6.Query 对象
Query代表面向对象的一个Hibernate查询操作
session.createQuery 接收一个HQL语句
HQL是Hibernate Query Language缩写, 语法很像SQL语法,但是完全面向对象的
举例
//1.查询所有的数据 public void testQuery(){ //这里就是通过足记编写的工具类,来获得session对象 Session session=HibernateUtils.getSession(); Transaction transaction =session.beginTransaction(); String hql="from Customer"; //类名 Query query =session.createQuery(hql); List<Customer> customers=query.list(); System.out.println(customers); transaction.commit(); session.close(); } }