Hibernate框架常用API详解

一、Configuration配置对象

Configuration用于加载配置文件。

1.1 调用configure()方法,加载src下的hibernate.cfg.xml文件

Configuration conf = new Configuration().configure();

1.2 如果配置文件不符合默认的加载规则,我们可以用:

new Configuration().configure(file);  //通过file加载

new Configuration().configure(path);  //通过路径加载

1.3 通过Configuration对象加载映射文件(不推荐,一般都将*hbm.xml映射文件配置到hibernate.cfg.xml中)

conf.addClass(User.class);

规范:1、orm映射文件名称应与实体的简单类名一致;

          2、orm映射文件需要与实体的类在同一包下。

二、SessionFactory工厂

SessionFactory相当于javaWeb的连接池,用于管理所有的session

根据Configuration配置信息创建SessionFactory

SessionFactory sf = conf.buildSessionFactory();

SessionFactory是线程安全的,可以是成员变量,多个线程同时访问时,不会出现线程并发的问题。

三、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是单线程,线程不安全,不能编写成员变量。

四、Transaction事务

打开事务: Transaction ts = session.beginTransaction();

获得事务(已经打开的事务对象):session.getTransaction();

提交事务:commit();

回滚事务:rollback();

五、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

六、工具类
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();
	}
}

猜你喜欢

转载自blog.csdn.net/pcwl1206/article/details/80620857