Configuration类,类负责管理 Hibernate 的配置信息
包括如下内容:
加载 hibernate.properties 和 hibernate.cfg.xml
持久化类与数据表的映射关系(*.hbm.xml 文件)
创建 Configuration :
构造方法,new Configuration()获得当前实例,可以加载hibernate.properties
Configuration cfg = new Configuration(); // 手动加载hbm
Xml文件(hibernate.cfg.xml)
Configuration cfg = new Configuration().configure();
.configure() 用于加载hibernate.cfg.xml
通过Configuration对象 addResource方法添加hbm文件映射
config.addResource(“com/my/bean/User.hbm.xml”);
通过addClass添加持久化类,Hibernate会在类所在包 自动搜索hbm 映射文件
config.addClass(User.class);
Configuration对象根据当前的配置信息生成 SessionFactory对象
SessionFactory 对象中保存了当前的数据库配置信息和所有映射关系以及预定义的SQL语句
SessionFactory 对象是线程安全的
SessionFactory还负责维护Hibernate的二级缓存
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
可以通过SessionFactory对象 获得Session对象
Session session = sessionFactory.openSession();
构造SessionFactory 很消耗资源,一般情况下一个应用只初始化一个
方法:
openSession() , 获得session对象(获得链接)
getCurrentSession() , 二级缓存使用
org.hibernate.Session 接口,相当于链接Connection
Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心
Session是线程不安全的
所有持久化对象必须在 session 的管理下才可以进行持久化操作
Session 对象有一个一级缓存,显式执行 flush 之前,所有的持久层操作的数据都缓存在 session 对象处
持久化类与 Session 关联起来后就具有了持久化的能力
方法 :
beginTransaction() ,开启事务
createQuery(String queryString) ,创建query对象,执行HQL语句
save(Object object) ,保存对象(自动添加id)
update(Object object) 更新对象(通过id)
saveOrUpdate(Object object) ,id如果没有值,将执行save,自动添加id值,如果id有值将执行update语句
delete(Object object) 通过id删除,传递是javabean对象
get(Class clazz, Serializable id) 通过id查询
load(Class theClass, Serializable id) 通过id查询
createSQLQuery(String queryString) ,执行sql (不常用)
createCriteria(Class persistentClass) ,通过hibernate提供api直接拼凑对象生成sql
close() 关闭链接,释放资源
Transaction 事务操作
代表数据库操作的事务对象
Transaction transaction = session.beginTransaction();
提供事务管理的方法
commit():提交相关联的session实例
rollback():撤销事务操作
wasCommitted():检查事务是否提交
如果没有开启事务,那么每个Session的操作,都相当于一个独立的事务
Query对象,执行HQL语句,hibernate query language ,与sql相同,但操作的是对象
方法:
list(),获得所有的数据
query.setFirstResult(startIndex); ,设置开始索引
query.setMaxResults(pageSize);,设置每页显示个数
query.uniqueResult() , 获得HQL直接只有一个结果,如果结果不是一个将抛异常
** 例如:session.createQuery(“select count(*) from User”).uniqueResult();