Hibernate核心接口一共有六个,分别为Session,SessionFactory,Transaction,Query,Criteria,Configuration。
1、Configuration
负责配置并启动Hibernate,创建SessionFactory对象。在hibernate的启动过程中,configuration类的实例首先定位映射文档位置、读取配置,获取一些底层实现的基本信息,其中几个关键属性包括:
数据库URL
数据库用户
数据库用户密码
数据库JDBC驱动类
数据库方言,用于对特定数据库支持,包含了针对特定数据库特性的实现
调用以下代码:
Configuration cfg=new Configuration().configure();
hibernate会自动在当前的CLASSPATH中搜索hibernate.cfg.xml文件,并将其加载至内存中,然后创建SessionFactory对象
2、SessionFactory
负责初始化Hibernate.充当数据源的代理,通过Configuration实例来构建。
Configuration cfg=new Configuration().configure();
SessionFactory sf=sfg.bulidSessionFactory();
Configuration实例会根据当前的数据库配置信息,构造SessionFactory实例并返回。一旦构造完毕,即被赋予特定的配置信息。
也就是说,之后cfg的任何变更都不会影响到已经创建的SessionFactory,需要从configuration重新构建一个Session Factory实例。如果需要访问多个数据库,针对每个数据库,应分别为其创建对应的SessionFactory实例
3、Session
Session接口负责执行被持久化对象的CRUD操作。该对象非线程安全。
由SessionFactory构建:
Configuration cfg=new Configuration().configure();
SessionFactory sf=sfg.bulidSessionFactory();
Session session=sf.openSession();
Session接口中提供了操纵数据库的各种方法:
save():把Java对象保存到数据库中
update():更新数据库中的Java对象
delete():把Java对象从数据库中删除
load():从数据库中加载Java对象
Session是一个轻量级对象。通常将每一个Session实例和一个数据库事务绑定。每执行一个数据库事务,都应该先创建一个新的Session实例。如果执行中出现异常,应该撤销事务,不论执行成功与否,最后都因该调用Session的Close()方法,关闭Session释放占用的资源。
例:public void save(Student student) {
Session session=GetSessionFactory.getSession();//
Transaction tr=session.beginTransaction();//开启事务
session.save(student);//保存对象,保存到数据库
tr.commit();//提交事务
session.close();
}
4、Transaction
是Hibernate的数据库事务接口,对底层事务接口做了封装,底层接口包括:JDBC API、JTA(Java Transaction API)、CORBA(Common Object Request Broker Architecture) API。
负责事务相关的操作,可选的,可以自己设计编写底层事务处理代码
5、Query和Criteria
可以通过这两个接口进行数据查询
Query query=session.createQuery("from Student where name=:sname");//执行查询语句,Student是类名,不是数据库表名,
//name是Student属性名
query.setParameter("sname", student.getName());//设置属性
List<Student> list=query.list();
tr.commit();//提交事务
Query面向HQL和Native SQL,Criteria则提供了面向对象的查询模式