欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

hibernate中session 与JDBC中 connection分析

程序员文章站 2022-05-01 15:54:20
...

前言:最近在重新了解hibernate,看到SessionFactory时对session与JDBC中的connection起了疑问。便查了下资料,以下代码两图来自黑马培训的资料,感谢讲课老师及黑马;其他来自百度文库,链接:https://wenku.baidu.com/view/35de88ff846a561252d380eb6294dd88d1d23d5e.html
hibernate中session 与JDBC中 connection分析
hibernate中session 与JDBC中 connection分析

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

/**
 * Hibernate的入门案例
 * @author jt
 *
 */
public class HibernateDemo1 {

	@Test
	// 保存客户的案例
	public void demo1(){
		// 1.加载Hibernate的核心配置文件
		Configuration configuration = new Configuration().configure();
		// 手动加载映射
		// configuration.addResource("com/itheima/hibernate/demo1/Customer.hbm.xml");
		// 2.创建一个SessionFactory对象:类似于JDBC中连接池
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		// 3.通过SessionFactory获取到Session对象:类似于JDBC中Connection
		Session session = sessionFactory.openSession();
		// 4.手动开启事务:
		Transaction transaction = session.beginTransaction();
		// 5.编写代码
		
		Customer customer = new Customer();
		customer.setCust_name("王西");
		
		session.save(customer);
		
		// 6.事务提交
		transaction.commit();
		// 7.资源释放
		session.close();
		sessionFactory.close();
	}
}

使用 hibernate 的关键就是创建 session 对象,有了session 对象,我们才能进行各种各样的操作。
session 与 connection 是多对一的关系,每个 session 都有一个与之对应的connection ,一个 connection 不同时刻可以供多个 session 使用。
我们想要对数据库进行操作的时候通过 session 就可以了。我们只要调用
session 中的各种方法(save() 、 update() 、 delete() 、 createQuery() 等),就可以简单便捷的达到操作数据库的目的。

获得 session 的方法
1.获得 session 的方式
想要得到 session 对象就需要先得到 sessionFactory 。
sessionFactory 中有两个方法可以让我们获得 session 。分别是
(1) 、 openSession()
(2) 、 getCurrentSession()
openSession() 是可以直接使用的;
而 getCurrentSession() 需要在 hibernate.hbm.xml 文件中进行配置,
然后才可以使用。配置代码如下图:
hibernate中session 与JDBC中 connection分析

2.两种方式获得 session 的区别
1 ·openSession 需要手动的关闭 session ,如果使用 openSession 而
没有手动关闭 session ,多次之后就会导致连接池的溢出;
而 getCurrentSession 获得的 session 在事务提交或者回滚之后就
会自动的关闭;
2 ·openSession 每次得到的都是新的 session 对象;
而 getCurrenSession 方法得到的 session 是单例的,也就是每次
得到的 session 对象是同一个对象。
3 ·openSession 中在获得了 session 之后就可以通过session.doWork() 方法获得 connection 对象;
getCurrentSession 中需要先打开事务,才能通过session.doWork() 方法获得 connection 对象.