HIbernate五大关键接口
一、Configuration
负责Hibernate配置工作,创建SessionFactory对象,在Hibernate启动过程中,Configuration类的实例首先定位在映射文件位置,读取配置,然后创建SessionFactory对象。用于3、4版本。
@Test public void testConfig(){ //读取src下hibernate.properties,不推荐使用 Configuration cfg1 = new Configuration(); //默认读取src下的hibernate,cfg.xml 推荐 Configuration cfg2 = new Configuration().configure(); //如果hibernate的核心配置文件不叫hibernate.cfg.xml,比如hb.cfg.xml Configuration cfg3 = new Configuration().configure("hb.cfg.xml"); //可编程式,可以不使用配置文件 //cfg.addProperties(); //cfg.addResource();
}
二、SessionFactory
SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,使用工厂模式创建Session对象。需要注意的是SessionFactory并不是轻量级的,一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
@Test public void testSessionFactory(){ //默认读取src下的hibernate.cfg.xml,推荐 Configuration cfg = new Configuration().configure(); //通过Configuration创建SessionFactory对象 //在hibernate3.x中是这种写法 SessionFactory sf1 = cfg.buildSessionFactory(); //在hibernate4.x中是这种写法 StandardServiceRegistry sr = new StandardServiceRegistryBuilder() .applySettings(cfg.getProperties()).build(); SessionFactory sf2 = cfg.buildSessionFactory(sr); //在hibernate5.x中是这种写法,不需要自己创建Configuration()对象 StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() .configure.build(); SessionFactory sessionFactory = new MetadataSources(serviceRegistry).buildMetadata() .buildSessionFactory();
}
三、Session
Session接口对于Hibernate开发人员来说是一个最重要的接口。在Hibernate中,实例化的Session是一个轻量级的类,创建和销毁它都不会占用很多资源。这在实际项目中非常重要,因为在程序中,可能会不断地创建以及销毁Session对象,如果Session的开销太大,会给系统带来不良影响。但是Session对象是非线程安全的,因此在你的设计中,最好是一个线程只创建一个Session对象。Session可以看作介于数据库连接与事务管理一种中间接口。我们可以将Session想象成一个持久对象的缓冲区,Hibernate能检测到这些持久对象的改变,并及时刷新数据库。我们有时也称Session是一个持久层管理器,因为Session负责执行被持久化对象的增、删、改、查操作,类似于JDBC的Connection和Statement,诸如存储持久对象至数据库,以及从数据库中获得它们。需要注意的是,Hibernate的Session不同于JSP应用中的HttpSession。在Hibernate中,我们使用Session这个术语时,指的是Hibernate自己的Session。
@Test public void testSession(){ //在hibernate5.x中是这种写法,不需要自己创建Configuration()对象 StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() .configure().build(); SessionFactory sessionFactory = new MetadataSources(serviceRegistry).buildMetadata() .buildSessionFactory(); //通过SessionFactory得到Session Session session = sessionFactory.openSession(); }
四、Transaction
负责事务相关的操作,它代表的是Hibernate事务,本质上也就是数据库事务。一般在Hibernate的增删改中出现,但是使用Hibernate一般使用Spring去管理事务。
@Test public void testTransaction(){ //在hibernate5.x中是这种写法,不需要自己创建Configuration()对象 StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder(). .configure.build(); SessionFactory sessionFactory = new MetadataSources(serviceRegistry).buildMetadata() .buildSessionFactory(); //通过SessionFactory得到Session Session session = sessionFactory.openSession(); //第一种写法,创建对象并直接开启事务 Transaction tx1 = session.beginTransaction(); //第二种写法,只是创建对象而已,需要调用begin()开启事务 Transaction tx2 = session.getTransaction(); tx2.begin(); }
五、Query
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现