首页 > 代码库 > Hibernate(二)之Hibernate-api详解
Hibernate(二)之Hibernate-api详解
一、Hibernate体系结构
二、Hibernate-api详解
2.1、Configuration配置对象
Configuration是用来加载配置文件的
我们Hibernate中主要有两个配置文件,第一个是核心的配置文件,第二个是映射文件。
2.2、SessionFactory工厂
SessionFactory 相当于java web连接池,用于管理所有session
获得方式:config.buildSessionFactory();
sessionFactory hibernate缓存配置信息 (数据库配置信息、映射文件,预定义HQL语句 等)
SessionFactory线程安全,可以是成员变量,多个线程同时访问时,不会出现线程并发访问问题。
SessionFactory与连接池的区别
getCurrentSession()方法
2.3、session对象
用来操作数据库的。Sesion相当于JDBC中的Connection。我们通过session操作PO对象实现增删改查。
2.3.1、增
2.3.2、改
2.3.3、删
2.3.4、查
A.使用session中的get方法查询
结果:
B.使用session中的load方法
load方法.返回一个代理对象,获得其内容时,会查询数据库,是每次访问属性都会查询数据库吗?
答:不是每次都查.代理对象中有一个标识是否被初始化的boolean型变量. 记录是否被初始化过.
代理都是要基于接口的,用load方法返回的代理,就没有实现任何接口?
答:java中的动态代理是基于接口. 而 Hibernate 是使用javassist-3.12.0.GA.jar 产生代理对象的.
该代理与被代理对象之间的关系是继承关系.与我们学的动态代理不是一种.所以不需要接口.
出现bug:
分析:get和load的执行原理
C.使用HQL语言查询数据库中表的所有记录
D.使用Criteria查询所有数据库
E.使用原生的SQL语句查询
2.3.5、总结
在增删改查中我们学习的方法有
session.save();
session.update();
session.delete();
session.get();
session.load(); 对比get
session.createQuery();
session.createCritieria();
session.createSqlQuery();
2.4、Transaction对象
Transaction封装了事务的操作
一般事务的操作中有:
开启事务 beginTransaction()
获得事务 getTransaction()
提交事务 commit()
回滚事务 rollback()
细节处理
从这里中我们使用getCurrentSession()方法获得一个事务,当你没有关闭这个事务的时候,
当你再次获取事务,它们属于同一个事务。
2.5、Query对象
Query对象封装了HQL语句对象,且封装了查询的细节
2.6、Criteria对象(了解)
使用like查找
一些基本的查询条件查询
2.7、工具类
我们知道在使用hibernate进行增删改查的时候都要获取到session,这导致代码的重用性很强,所以我们可以
创建一个工具类去解决这个问题。
import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.classic.Session; //完成Hibernate工具类 //封装配置文件读取操作 //封装Sessionfactroy创建操作 //封装session获得操作 public class HibernateUtils { private static SessionFactory sf; static{ //1加载配置 Configuration conf = new Configuration().configure(); //2 根据Configuration 配置信息创建 SessionFactory sf = conf.buildSessionFactory(); // Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() { @Override public void run() { System.out.println("虚拟机关闭!释放资源"); sf.close(); } })); } public static org.hibernate.Session openSession(){ //3 获得session Session session = sf.openSession(); return session; } public static org.hibernate.Session getCurrentSession(){ //3 获得session Session session = sf.getCurrentSession(); return session; } }
Hibernate(二)之Hibernate-api详解