1):Configuration配置对象
Configuration用于加载配置文件。
1): 调用configure()方法,加载src下的hibernate.cfg.xml文件
Configuration conf = new Configuration().configure();
2):如果配置文件不符合默认的加载规则,我们可以用:
new Configuration().configure(file); //通过file加载
new Configuration().configure(path); //通过路径加载
3): 通过Configuration对象加载映射文件(不推荐,一般都将*hbm.xml映射文件配置到hibernate.cfg.xml中)
conf.addClass(User.class);
规范:1、orm映射文件名称应与实体的简单类名一致;
2、orm映射文件需要与实体的类在同一包下。
2):SessionFactory工厂
SessionFactory相当于javaWeb的连接池,用于管理所有的session
根据Configuration配置信息创建SessionFactory
SessionFactory sf = conf.buildSessionFactory();
SessionFactory是线程安全的,可以是成员变量,多个线程同时访问时,不会出现线程并发的问题。
3):Session会话
Session相当于JDBC的Connection会话,通过操作session操作PO对象实现增删改查
session的api:
1、save 保存
2、update 更新
3、delete 删除
4、get 通过id查询,如果没有null
load通过id查询,如果没有抛异常
5、createQuery("hql") 获得Query对象
6、createCriteria(Class) 获得Criteria对象
session是单线程,线程不安全,不能编写成员变量。
4):Transaction事务
打开事务: Transaction ts = session.beginTransaction();
获得事务(已经打开的事务对象):session.getTransaction();
提交事务:commit();
回滚事务:rollback();
5):Query对象
Qyuery主要用于Hibernate执行hql语句。
hql语句:hibernate提供的面向对象的查询语句,使用对象(类)和属性进行查询,区分大小写。
获得Query对象:Query query = session.createQuery("hql")
方法:
list():查询所有 List<User> list = query.list();
uniqueResult():获得一个结果
setFirstResult(int):分页,开始索引数startIndex
setMaxResult(int):分页,每页显示的个数pageSize
6):工具类
package com.zju.model; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; //工具类
public class H3Utils { // 会话工厂,整个程序只有一份
private static SessionFactory factory; // 放在静态块里
static {
// 1 加载配置文件
Configuration conf = new Configuration().configure();
// 2 获得工厂
factory = conf.buildSessionFactory();
// 3 关闭虚拟机时,释放SessionFactory
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { @Override
public void run() {
System.out.println("虚拟机关闭,释放资源!");
factory.close();
}
}));
} // 获得一个新的session
public static Session openSession() {
return factory.openSession();
} //获得当前线程中绑定的session
public static Session getCurrentSession(){
return factory.getCurrentSession();
}
}