Hibernate中的Session是什么?如何获取?代码举例讲解

在Hibernate中,Session表示数据库连接,是Hibernate工作的中心对象。主要有以下两种方式获取Session:

  1. 通过SessionFactory获取:
  • 我们可以通过HibernateUtil类的getSessionFactory()方法获取SessionFactory对象,再调用openSession()方法获取Session。

例如:

SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
  1. 使用getCurrentSession()获取:
  • 我们可以在Hibernate配置文件中设置hibernate.current_session_context_class属性为thread,然后通过SessionFactory的getCurrentSession()方法获取Session。
  • 这种方式的Session是线程绑定的,在同一个线程内获取到的Session对象是同一个。

例如:
在hibernate.cfg.xml中设置:

<property name="hibernate.current_session_context_class">thread</property>

然后在代码中:

Session session = sessionFactory.getCurrentSession();

Session接口提供了各种数据库操作方法,主要包括:

  • save()/saveOrUpdate():保存/更新对象
  • delete():删除对象
  • get():根据主键获取对象
  • createQuery():创建查询
  • bulkUpdate():批量更新
  • update():更新对象
  • 等等

例如:

Transaction tx = session.beginTransaction();  // 开始事务

Account account = new Account();     // 创建对象
account.setBalance(100);
session.save(account);             // 保存对象

Account account2 = session.get(Account.class, 1);  // 获取主键为1的对象
account2.setBalance(200);
session.update(account2);         // 更新对象

Query query = session.createQuery("from Account");// 创建查询 
List<Account> list = query.list();   // 执行查询

tx.commit();          // 提交事务