Hibernate的核心API
来源:互联网 发布:c语言返回值什么意思 编辑:程序博客网 时间:2024/05/08 06:06
在Hibernate中有6个常用的核心API,分别是Configuration、SessionFactory、Session、Transaction、Query和Criteria(英文意思是:标准,条件)。
一、Configuration
Hibernate用这个API的实例去读取Hibernate配置文件和映射文件。其代码如下:
Configuration config = new Configuration().configure();
或
Configuration config = new Configuration().configure("xml文件位置");
二、SessionFactory
SessionFactory接口负责Hibernate的初始化和建立Session对象(sessionFactory实例保存了Configuration对象中的所有配置文件信息)。它在Hibernate中起到了一个缓冲区的作用,Hibernate可以将自动生成的SQL语句、映射数据以及某些可重复利用的数据放在这个缓冲区中。同时它还保存了对数据库配置的所有映射关系。它是Hibernate的二级缓存。其代码如下:
SessionFactory sf = config.buildSessionFacotry();
SessionFactory具有以下特点:
(1)它是线程安全的,它的一个实例可以提供给多个线程使用
(2)它是重量级的,不能随意地创建和销毁它的实例。(也就是说,创建和销毁SessionFactory的实例的开销大)
一般的项目中只需要一个SessionFactory对象即可,只有当一个项目具有多个数据源的时候才会需要创建多个SessionFactory。故通常会抽取出一个HibernateUtil类来获取Session对象。代码如下:
public class HibernateUtil{ private static final Configuration config; private static final SessionFactory factory; static{ config = new Configuration().configure(); factory = config.buildSessionFactory(); } public static Session getSession(){ return factory.openSession(); }}
三、Session
Session是应用程序与数据库之间交互操作的单线程实例,它的主要作用是为持久化对象提供创建、读取和删除等功能,所有持久化对象必须在Session的管理下才可以进行持久化操作。通过SessionFactory获取Session实例有两种方法,代码如下:
Session session = SessionFactory.openSession();Session session = SessionFactory.getCurrentSession();
关于这两个获取Session实例的方法的区别,我们先来理解下什么是本地事务,什么是全局事务。
本地事务在Hibernate的配置文件中需要这样配置(jdbc事务):
<property name="hibernate.current_session_context_class">thread</property>
全局事务在Hibernate配置文件中需要这样配置(jta事务):
<property name="hibernate.current_session_context_class">jta</property>
关于本地事务和全局事务的区别,请参考:点击进入
简单来说,本地事务是在单个数据库的本地并且限制在单个进程内的事务;全局事务 是跨越多个数据库和进程的。
以上获取Session实例的两种方法的区别是:
(1)getCurrentSession()会绑定到当前的线程中去,而openSession()不会;
(2)getCurrentSession()创建的session在commit或rollback后会自动关闭,而openSession()不会
更多参考:点击进入
Session是线程不安全的,多个并发线程同时操作一个Session实例时,就可能导致Session存取的混乱(方法内部定义和使用Session时,不会出现线程问题),设计软件架构时,应尽量避免多个线程共享一个Session实例。Session是轻量级的,即,创建和销毁session不会消耗太大。Session是Hibernate的一级缓存,主要用于存放当前工作单元加载的对象。
Session提供了大量的方法,具体如下:
- save()、update()、saveOrUpdate():用于增加或修改对象
- delete():删除对象
- get()、load():根据主键查询(这两个方法的区别:点击进入)
- createQuery()和createSQLQuery():用于数据库查询对象(一般无条件)
- createCriteria():条件查询
四、Transaction
事务。用于管理事务,代码如下:
Transaction tx = session.beginTransaction();
提供的方法:
- commit():提交事务
- rollback():事务回滚
- wasCommitted():检查事务是否提交
五、Query
Query代表面向对象的一个Hibernate查询操作。使用这个对象的步骤:
- 获得Session对象
- 编写HQL语句
- 调用session.createQuery创建查询对象
- 如果HQL包含参数,使用Query的setXxx设置参数
- 调用对象的list()或uniqueResult()方法执行查询
String hql = "from Customer"; //"Customer"是类Query q = session.createQuery(hql);
六、Criteria
- Hibernate 核心的API
- Hibernate的核心API
- Hibernate的五个核心API
- 5.Hibernate核心的API
- Hibernate核心API的详解
- Hibernate核心API(理解)
- Hibernate核心API
- Hibernate:核心API
- Hibernate核心API
- Hibernate核心API
- hibernate核心API简介
- hibernate核心api
- Hibernate入门----核心API
- hibernate核心API介绍
- Hibernate核心API详解
- Hibernate 核心 api
- hibernate核心API
- Hibernate核心API
- 适合移动设备的小巧jQuery颜色拾取器插件
- 接上,struts2访问页面元素的另一种方法。
- Ext.XTemplate加载拥有头像的用户
- 安全起见,小心使用C语言realloc()函数
- xUtils源码阅读(3)-ImageManagerImpl
- Hibernate的核心API
- 8月房价上涨城市数量增多 涨幅全线扩大
- Linux ALSA声卡驱动之一:ALSA架构简介
- Java之多线程锁
- 策略模式【Strategy Pattern】
- 关于flask中文件下载的实例
- ARP协议解析
- JS加PHP动态倒计时(定时器)
- 再论EM算法的收敛性和K-Means的收敛性