hibernate中session 与JDBC中 connection分析

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

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 文件中进行配置,
然后才可以使用。配置代码如下图:
在这里插入图片描述

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 对象.

发布了64 篇原创文章 · 获赞 16 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/s_156/article/details/103801544
今日推荐