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();
}
}