hibernate入门四之session学习
hibernate的执行流程
session简介
- 不建议使用jdbc的connection操作数据库,而是通过使用session操作数据库
- session可以理解为操作数据库的对象
- session与connection,是多对一的关系,每个session都有一个与之对应的connection,一个connection不同时刻可以供多个session使用。
transaction简介
- hibernate对数据的操作都是封装在事务当中,并且默认是非自动提交的方式。所以session保存对象时,如果不开启事务,并且手工提交事务,对象并不会真正保存在数据库中。
- 如果想用hibernate像jdbc那样自动提交事务,必须调用session对象的doWork()方法,获得jdbc的connection后,设置其为自动提交事务模式(注意:通常不建议这么做)
session详解:
如何获得session
- openSession
- getCurrentSession
如果使用第二种方式,需要在hibernate.cfg.xml中配置,如下图
openSession与getCurrentSession的区别:
- getCurrentSession在事务提交或回滚之后会自动关闭,而openSession需要手动关闭。如果使用openSession没有关闭,多次之后会导致连接池溢出。
- openSession每次创建新的Session对象,而getCurrentSession使用现有的对象