在Hibernate中,Session表示数据库连接,是Hibernate工作的中心对象。主要有以下两种方式获取Session:
- 通过SessionFactory获取:
- 我们可以通过HibernateUtil类的getSessionFactory()方法获取SessionFactory对象,再调用openSession()方法获取Session。
例如:
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
- 使用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(); // 提交事务