Hibernate API详解

hibernate体系结构

PO:persistent Object 持久对象,javabean+hbm.xml,习惯称呼为PO类

Configuration

Configuration hibernate 提供用于存放所有配置信息对象 

构造方法

new Configuration(),加载配置文件,hibernate.properties文件。但一般情况没有编写。

       参考的配置文件:%h%project/etc/hibernate.properties

 api

config.configure(),加载src下hibernate.xml文件

config.configure(String path) path指定核心配置文件的位置

   例如:conifgure("/cn/util/abc.cfg.xml")

加载映射文件

通常将映射文件配置hibernate.cfg.xml<mapping resource="cn/util/.../User.hbm.xml"> 

config.addClass(*.class) 将在class对象同级目录下,同名的hbm.xml文件

      例如:config.addClass(Book.class),加载Book类,所在的包下面的Book.hbm.xml文件

config.addResource(String hbm)将指定映射文件xml加载内存,此时文件名称任意,不建议任意

SessionFactory

sessionFactory  用于提供session,相当于连接池,通过Configuration加载hibernate.cfg.xml创建对象

获得对象:config.builderSessionFactory()

SessionFactory是线程安全的。目的是每一个线程获得的session都是不同的,不存在线程并发问题

session获得:

  创建一个新的session:factory.openSession();

  将session绑定本地线程中,在一个线程共享session:factory.getCurrentSession();(之后使用)

工具类

package cn.hibernate.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class H3Utils {
//方式1
//private static SessionFactory factory2 = new Configuration().configure().buildSessionFactory();


//方式2
//创建一个工厂
private static Configuration configuration;
private static SessionFactory factory;


static{
configuration = new Configuration().configure();
factory = configuration.buildSessionFactory();
}


public static Session openSession(){
return factory.openSession();
}
}

Session接口

session :服务器 与 数据库之间会话,相当于 Connection

session单线程,存在线程并发问题,线程不安全。 

注意:session必须关闭,session.close();

Transaction 

开启事物:session.beginTransaction();

提交事物:session.commit();

回滚事物:session.rollback();

@Test
public void demo01(){
//01.获取session
Session session = H3Utils.openSession();
Transaction transaction = null;
try {
//#1开启事物
transaction = session.beginTransaction();

//操作:。。。。


//#2提交
transaction.commit();
} catch (HibernateException e) {
// TODO Auto-generated catch block
if(transaction != null){
//#3回滚
transaction.rollback();
}
e.printStackTrace();
}
}

原文地址:https://www.cnblogs.com/MisterLiu/p/6933498.html